![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть Dll, написанная на С++. Описание функций и процедур там такое:
Код:
DLL_EXP void __stdcall Name2(int param1, int param2); DLL_EXP void __stdcall Name3(char* param1); DLL_EXP char* __stdcall Name5(); Необходимо подключить эту Dll к проекту на Delphi. Делаю так: Код:
unit DllWork; interface uses Windows; var Name2: procedure(param1: Integer; param2: Integer); stdcall; Name3: procedure(param1: string); stdcall; Name5: function(): string; stdcall; DllHandle: THandle; procedure LoadDllandProcs(DllName: string); procedure Name2_D(param1, param2: Integer); procedure Name3_D(param1: string); function Name5_D(): string; implementation procedure LoadDllandProcs(DllName: string); begin @Name2:= nil; @Name3:= nil; @Name5:= nil; DllHandle := LoadLibrary(PChar(DllName)); if DllHandle >= 32 then begin @Name2 := GetProcAddress(DllHandle, 'Name2'); @Name3 := GetProcAddress(DllHandle, 'Name3'); @Name5 := GetProcAddress(DllHandle, 'Name5'); end; end; procedure Name2_D(param1, param2: Integer); begin if @Name2 <> nil then Name2(param1, param2); end; procedure Name3_D(param1: string); begin if @Name3<> nil then Name3(param1); end; function Name5_D(): string; begin if @Name5 <> nil then Result := Name5; end; end. При выполнении появляются ошибки чтения нулевой и других ячеек памяти (по всей видимости, ошибка в DLL). Но хотелось бы узнать, как правильно подгружать и вызывать процедуры и функции из библиотек? Особенно, с функцией, возвращающей char* Последний раз редактировалось Bargest, 05.10.2012 в 00:24. |