Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Структура как возвращаемое функцией значение   Найти похожие ветки 

 
qwerty2   (2003-11-03 22:53) [0]

Есть следующая структкра:
type
My_Record = record
Name1 : string;
Name2 : string;
Name3 : string;
end;

В одной dll описывается функция возвращающая эту структуру:

function GetMyRec:MyRecord; export; safecall;
var rr:MyRecord
begin
//заполнение всех полей например rr.Name1:="dfsdfsdfsd";
GetMyRec:=rr;
end;

из другой программы вызываю эту функцию

...
type
proc=Function:My_Record;
...
var
hd:THandle;
p:proc;
RValue2:My_Record;
...
hd:=LoadLibrary("MyDll.dll");
@p:=GetProcAddress(hd,"GetMyRec");
RValue2:=p;

после выполнения этих действий структура RValue2 остается незаполенной! в чем ошибка?


 
Dimaxx ©   (2003-11-04 00:40) [1]

Поставь так...

PMy_Record = ^My_Record;
My_Record = record
Name1: string;
Name2: string;
Name3: string;
end;

...и передавай в длл не запись, а указатель на запись. Тада передаваться будет тип pointer, а это удобнее. В длл присваивание выполняй что-то типа этого

var X: PMy_Record;
...
X^.Name1:="111";
X^.Name2:="222";
X^.Name3:="333";

И вообще используй не string, а shortstring. И все будет хоккей.


 
Bart   (2003-11-04 19:41) [2]

поставь uses ShareMem dв проекте и в в dll



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
9-40779
P4
2003-03-27 08:17
2003.11.13
Работа с игрой


7-42164
M@D
2003-09-01 22:53
2003.11.13
Shutdown XP


1-41236
KoSt1
2003-11-01 11:36
2003.11.13
TGauge


3-40878
Vladislav
2003-10-20 17:51
2003.11.13
MemoryTable в Interbase


3-41039
NaZGA
2003-10-14 14:11
2003.11.13
ADO Временные таблицы