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

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

Передача пользовательского типа из функции в DLL [D7, WinXP]


JetuS ©   (2006-11-21 13:50:00) 

Здравствуйте!

У меня такая беда: есть dll в которой есть функция, возвращающая данные пользовательского типа.


type
 TDLLVersionInfo = record
   HiVersion: Byte;
   LoVersion: Byte;
   Comments: String;
 end;

function ReadDLLVersionInfo: TDLLVersionInfo; stdcall;
var
 DLLVI: TDLLVersionInfo;
begin
 DLLVI.HiVersion   := 1;
 DLLVI.LoVersion   := 200;
 DLLVI.Comments    := 'It''s a test comments string';
 Result := DLLVI;
end;


Вопрос: как мне теперь получить эти данные из этой DLL?


Орион   (2006-11-21 14:16:00) [1]

> [5] Игорь Шевченко ©   (21.11.06 14:06)

этож коммент, зачем его читать? :)


Сергей М.   (2006-11-21 14:06:00) [2]


> Почему?


Потому что Sharemem не задействован.


Игорь Шевченко   (2006-11-21 14:06:00) [3]

Уж сколько раз твердили миру - читайте то, что написано в файле с проектом dll


JetuS   (2006-11-21 14:05:00) [4]

Забыл дописать:
var
 ReadDLLVersionInfo: TReadDLLVersionInfo;


JetuS   (2006-11-21 14:03:00) [5]


> var
>  MyResult: TDLLVersionInfo;
>
> ..
> MyResult := ReadDLLVersionInfo;


Н-да. Сильно.

Я пробую в программе так:
type
  TReadDLLVersionInfo = function: TDLLVersionInfo; stdcall;
...

function GetDLLInfo: TDLLVersionInfo;
begin
 DllHandle := LoadLibrary(PAnsiChar(DLLFileName));
 if DllHandle < 32 then
 ...
 @ReadDLLVersionInfo := GetProcAddress(DllHandle, 'ReadDLLVersionInfo');
 if @ReadDLLVersionInfo <> nil then
   Result := ReadDLLVersionInfo
 else ...;
 FreeLibrary(DllHandle);
end;


На FreeLibrary(DllHandle) вылетает AV.
Почему?


Сергей М.   (2006-11-21 13:54:00) [6]

var
 MyResult: TDLLVersionInfo;

..
MyResult := ReadDLLVersionInfo;


Наверх

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