Передача массива записей в Delphi DLL - PullRequest
2 голосов
/ 14 марта 2012

Можно ли передать массив записей в dll (delphi)?

У меня есть запись, которую я помещаю в общий (используемый в dll и основных приложениях) модуль delphi

TmyRecord = record
  tgl  : Double;
  notes: shortstring;
end

TarrOfMyRecord = array[1..1000] of TmyRecord

В dll у меня есть функция:

function getNotes(var someRecord: TArrOfMyRecord):boolean; stdcall;
begin
  someRecord[1].tgl:= now;
  someRecord[1].notes:= 'percobaan';

  someRecord[2].tgl:= now + 1;
  someRecord[2].notes:= 'percobaan1';

  return:= true;
end;

Я не могу получить правильные значения someRecord, возвращаемого dll.

Спасибо

UPDATE: Это мой код в основных приложениях:

interface

function getNotes(var someRecord: TArrOfMyRecord):boolean; stdcall; external 'some.dll'

implementation

procedure somefunction;
var myRecord: TarrOfMyRecord;
    i: integer;
begin
  if getNotes(myRecord) then
      for i:= 1 to 1000 do memo1.lines.add(myRecord[i].notes);

end;

1 Ответ

0 голосов
/ 20 августа 2012

Лучший способ передать огромное количество данных в DLL - это использовать указатель.

Определения записей:

...
TarrOfMyRecord = array[1..1000] of TmyRecord
ParrOfMyRecord = ^TarrOfMyRecord;

DLL:

function getNotes(someRecord: PArrOfMyRecord):boolean; stdcall;
begin
  someRecord^[1].tgl:= now;
...

Программа:

...
begin
  if getNotes(@myRecord) then
      for i:= 1 to 1000 do memo1.lines.add(myRecord[i].notes);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...