Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Типы в Dll [D7, WinXP]


Страницы:   1 2

!_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);


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо