![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Типы в Dll [D7, WinXP]
!_SM_! © (2006-07-19 20:15:00)Есть DLL (моя) в ней описан тип
TInfo = record
Name, Author: String;
end;
есть процедура
procedure GetInfo(var Inf: TInfo); stdcall; export;
begin
Inf.Name:='Name';
Inf.Author:='Author';
end;
в ехе описан тот-же тип
TInfo = record
Name, Author: String;
end;
описана переменная
var GetInfo: procedure (var Inf: TInfo); stdcall;
из ехе динамически гружу dll'ку получаю указатель на процедуру, вызываю ее
HDll:=LoadLibrary(PChar(<путь и имя dll>));
if HDll<>0 then begin
@GetInfo:=GetProcAddress(HDll, 'GetInfo');
if @GetInfo=nil then FreeLibrary(HDll) else
begin
SetLength(Inf.Name, 50);
SetLength(Inf.Author, 50);
GetInfo(Inf);
ShowMessage(Inf.Name);
end;
end;
получаю AV. Как это обойти и желательно без использования ShareMem?
Zeqfreed (2006-07-19 21:15:00) [21]ShareMem ещё не забыть.
StriderMan (2006-07-19 21:11:00) [22]вместо
> var GetInfo: procedure (var Inf: TInfo); stdcall;
надо
type
TGetInfoProc = procedure (var Inf: TInfo); stdcall;
var
GetInfo: TGetInfoProc ;
далее
...
GetInfo:=GetProcAddress(HDll, 'GetInfo');
if Assigned(GetInfo) then
....
!_SM_! (2006-07-19 20:19:00) [23]AV на строке GetInfo(Inf);