![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |