是否可以将记录数组传递给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;
我无法获得dll返回的someRecord的正确值。
由于
更新: 这是我在主要应用程序中的代码:
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;
答案 0 :(得分:0)
将大量数据传递给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);
...