Работа с DLL
Работа с DLL
Работа с DLL Как загрузить 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; Kanes Сообщ. #3 от 7.03.05, 02:15 Unregistered Статическое подключение функций из 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 в папку с проектом и запускаем сам проект