Показать сообщение отдельно
  #1  
Старый 04.10.2012, 00:07
MrBadge MrBadge вне форума
Прохожий
 
Регистрация: 30.12.2009
Сообщения: 28
Репутация: 10
По умолчанию

Есть 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*
Ответить с цитированием