Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2014, 16:46   #1
mobac
Пользователь
 
Регистрация: 30.08.2012
Сообщений: 17
Восклицание Перевод проекта в DLL

Здравствуйте! В Дельфи не особо разбираюсь, и мне надо перевести программу Delphi (с исходным кодом, естественно) в DLL.
Сам код:
Код:
program converter;
  
{$APPTYPE CONSOLE}
  
uses
  SysUtils;
  
const
  a: string[8] = 'ABCDEFGO'; {задаём строку для поиска
 в ней символов}
  
Var
   I : byte;
   f1:file of byte;
   f2:textfile;
  
  
{функция для перевода целой части числа из 10-й в любую сс}
function Cel(d: real; c: integer): string;
var
  s: string;
  n2: integer;
begin
  n2 := round(int(d)); {берём целую часть от числа}
  s := '';
  repeat
    s := ((a[n2 mod c + 1]) + s); {повторяем пока число не будет равно нулю берём целую часть при
    делении числа на основание и берём остаток + 1 от деления целой части на 16, записываем
    результат посимвольно в строку s}
    n2 := n2 div c;
  until (n2 = 0);
  if length(s)<3 then
    for i:=length(s)+1 to 3 do
      s:='A'+s;
  Cel := s;
end;
  
begin
  if ParamCount < 2 then
    begin
      writeln('Not enough parameters!');
      exit;
    end
  else
    begin
      if fileexists(paramstr(1)) then
        begin
          assignfile(f1,paramstr(1));
          assignfile(f2,paramstr(2));
          reset(f1);
          rewrite(f2);
          while not eof(f1) do
            begin
              read(f1,i);
              write(f2,cel(i,8));
            end;
          closefile(f1);
          closefile(f2);
        end
      else
        begin
          writeln('File not exist!');
          exit;
        end;
    end;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Что надо доделать: сделать, чтоб при использовании DLL была функция (wctrun), с двумя аргументами: wctrun(0,INPUTfile.wct (P.S. вместо файла может быть код, если код, то в первом аргументе стоит 1), exe). Например: wctrun(0, Test.wct, exe) - создаёт скрытую папку с названием "temp" в текущей директории и в этой папке создаёт файл temp.(тут третий аргумент, т.е. EXE или COM) , после выполнения "подпрограммы" удаляет файл и директорию.
Ещё пример: wctrun(1, "AAABBBCCCDDDEEEFFFGGGOOO", com). Спасибо, очень срочно надо! За лучший ответ поставлю "Спасибо"!
mobac вне форума Ответить с цитированием
Старый 11.08.2014, 17:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
INPUTfile.wct
Какого типа?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2014, 18:05   #3
mobac
Пользователь
 
Регистрация: 30.08.2012
Сообщений: 17
Смущение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Какого типа?
Текстовой файл, содержит машинный код на системе счисления wct типа "AAABBBCCCDDDEEEFFFGGGOOOAAABBBOOOC CCAAADDDEEE"

Пожалуйста, помоги сделать!

Последний раз редактировалось Stilet; 11.08.2014 в 21:16.
mobac вне форума Ответить с цитированием
Старый 11.08.2014, 20:29   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Чем помочь то? Научить компилировать ДЛЛ?
FaTaL вне форума Ответить с цитированием
Старый 11.08.2014, 21:08   #5
mobac
Пользователь
 
Регистрация: 30.08.2012
Сообщений: 17
Восклицание

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Чем помочь то? Научить компилировать ДЛЛ?
Нет.. сделать DLL, как я описал выше.. пожалуйста! Очень надо!
mobac вне форума Ответить с цитированием
Старый 11.08.2014, 21:23   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кто-нибудь плиз обьсните мне деревенщине чего автору надо?
Я ниче не понял...
Или вернее из всей это каши понял только такое:
Код:
library Project1;

{$mode objfpc}{$H+}

uses
  Classes,sysutils,windows
  { you can add units after this };
 procedure wctrun(n:integer;f:TextFile;c:PChar);
 begin
   {создаёт скрытую папку с названием "temp" в текущей директории и в этой папке создаёт файл temp.
   (тут третий аргумент, т.е. EXE или COM) , после выполнения "подпрограммы" удаляет файл и директорию. }
   MkDir('temp');
   SetFileAttributes('temp',FILE_ATTRIBUTE_HIDDEN);
   AssignFile(f,'temp/temp.');Rewrite(f);
   CloseFile(f);
   DeleteFile('temp/temp.');
   RemoveDirectory('temp');
 end;

exports wctrun;
begin
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2014, 21:37   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

DLL - это библеотека с функциями, процедурами, константами(наверное) и даже классами. Функции легко можно поместить в DLL, только потом придется их экспортировать из неё. Ключевое слово Exports.
При вызове функции или процедуру, не важно, надо сначала её от туда извлечь. Есть два способа извлечения: Динамический и статический. Статический самый простой, но тогда библеотека всегда должна быть рядом с dll. Для этого надо описать процедуру или функцию(вместе с параметрами) как обычно мы делаем это в проектах после ; поставить это:
Код:
stdcall; external '<имя dll>.dll';
Динамический способ похож на статический, но при этом ты можешь подключить dll когда это требуется и освободить память от dll, когда это по требуется. Для такого способа потребуется:
Переменные с типом нужной процедуры или функции.
Функция LoadLybrary. Её результат надо записать в переменную типа THandle(это адрес библиотеки в памяти).
Функция GetProcAddress. Она выдаст адрес нужной тебе функции.
Функция FreeLybrary. Очистит память от библиотеки. Параметр - адрес библиотеки в памяти.
Если захочешь записать в dll класс(class), то придется писать интерфейс для его использования.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 11.08.2014, 22:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но тогда библеотека всегда должна быть рядом с dll
Неправда. Положение ДЛЛ не обязательно должно быть с программой. Если ее нет в каталоге с программой, то библиотека ищется по путям в переменой окружения PATH.
Но в данном случае автору это не поможет с написанием зловреда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2014, 11:34   #9
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Неправда. Положение ДЛЛ не обязательно должно быть с программой. Если ее нет в каталоге с программой, то библиотека ищется по путям в переменой окружения PATH.
Но в данном случае автору это не поможет с написанием зловреда.
Интересно, что какого он пишет? Не генерик ли? Хотя в любом случае, компилятор не сможет даже скомпилировать до конца. Антивирус сразу лавочку закроет.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll и т.д. 8Observer8 Qt и кроссплатформенное программирование С/С++ 12 25.06.2015 03:18
Доработка проекта на C# с целью создания dll Horos Фриланс 0 30.10.2013 00:24
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
Debugger Kernel BORDBK160.DLL or BORDBK160N.DLL is missing or not registered. Человек_Борща Общие вопросы Delphi 0 15.07.2012 14:01
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36