Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.100.210] |
|
Сообщ.
#1
,
|
|
|
Здесь будут рассматриваться вопросы по работе с динамическими библиотеками.
|
Сообщ.
#2
,
|
|
|
Как загрузить DLL и вызвать из нее функцию?
Нижеприведенный код загружает DLL в память, вызывает из нее функцию и выгружает DLL. type TMyProc = procedure(const N: Integer); stdcall; procedure TForm1.Button1Click(Sender: TObject); var MyProc: TMyProc; Lib: THandle; DLLName: string; begin DLLName := 'mydll.dll'; if FileExists(DLLName) then begin Lib := LoadLibrary(PChar(DLLName)); if Lib < HINSTANCE_ERROR then Win32Check(False); // или // ShowMessage('Не удалось загрузить библиотеку ' + DLLName); try MyProc := GetProcAddress(Lib, 'MyProc'); if Assigned(MyProc) then MyProc(123); finally FreeLibrary(Lib); end; end; end; |
Сообщ.
#3
,
|
|
|
Статическое подключение функций из DLL
Итак, например вы создали DLL, в которой хранится набор математических функций. Те функции, которые вы собираетесь передовать в прогу, надо записать в разделе exports, в коде вашей DLL. Например : library Project2; uses SysUtils, Classes; {$R *.res} function MyFunction(параметры): значение ; begin ....................... end; exports MyFunction; //Экспортируем функции, процедуры и т.п. begin end. Компилируем библиотеку. А теперь открываем исходник вашей проги и в разделе INTERFACE записываем загружаемые функции. Способы загрузки экспортируемых функций 1) Самый простой : Function MyFunction(параметры) : значение; //Обьявляем функцию external 'MyDll.dll'; //Название вашей DLL 2) По имени : Function MyFunction(параметры) : значение; //Обьявляем функцию external 'MyDll.dll' name 'MyFunction'; //Название вашей DLL, name - имя экспортируемой функции 3) По индексу : Function MyFunction(параметры) : значение; //Обьявляем функцию external 'MyDll.dll' index 1; //Название вашей DLL, index - индекс функции внутри DLL Не забудьте, что конструкцию external 'MyDll.dll'; надо писать, после каждой экспортируемой функции, иначе появится ошибка,о том что функции не обьявлены Конец - кидаем DLL в папку с проектом и запускаем сам проект В архиве лежит нескомпилированный исходник всех трех примеров(прога+ДЛЛ) Это сообщение было перенесено сюда или объединено из темы "Dll в памяти," Прикреплённый файл______.rar (10.27 Кбайт, скачиваний: 266) |