Есть 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*