c#调用DLL如何返回结构数据
调用的是delphi的dll
结构如下:
type
TMachineList = record
IpAddr: array [0..3] of char; //机器IP地址
MachineType: array [0..19] of char; //机器型号
MachineSN: array [0..15] of char; //机器序号
MachinePordTime: array [0..7] of char;//机器生产日期
MachineDescr: array [0..39] of char; //机器描述
CtrlManuf: array [0..19] of char; //控制器厂商
CtrlType: array [0..19] of char; //控制器型号
CtrlSerNr: array [0..19] of char; //控制器序号
CtrlHWVers: array [0..19] of char; //控制器硬件版本
CtrlSWVers: array [0..39] of char; //控制器软件版本
CtrlNetVers: array [0..19] of char; //控制器联网程序版本
CtrlDescr: array [0..39] of char; //控制器描述
MoldDataVers: array [0..19] of char; //模具资料版本
end;
PMachineList = ^TMachineList;
AMachineList = array [0..0] of TMachineList;
PAMachineList = ^AMachineList;
函数
function GetMachineList(MachineList: PMachineList): integer;stdcall;
var
i: integer;
PML: PAMachineList;
begin
PML := PAMachineList(MachineList);
LockXY.Acquire;
try
for i := 0 to UsedCount - 1 do
begin
application.messagebox(pchar(inttostr(Integer(UsedCount))),'标题',mb_ok);
CharArrayCopy(PML[i].IpAddr, ThreadMap[i].IpAddr, 4);
//CharArrayCopy(PML[i].MachineType, ThreadMap[i].MachineType, 20);
//CharArrayCopy(PML[i].MachineSN, ThreadMap[i].MachineSN, 16);
//CharArrayCopy(PML[i].MachinePordTime, ThreadMap[i].MachinePordTime, 8);
//CharArrayCopy(PML[i].MachineDescr, ThreadMap[i].MachineDescr, 40);
//CharArrayCopy(PML[i].CtrlManuf, ThreadMap[i].CtrlManuf, 20);
//CharArrayCopy(PML[i].CtrlType, ThreadMap[i].CtrlType, 20);
//CharArrayCopy(PML[i].CtrlSerNr, ThreadMap[i].CtrlSerNr, 20);
//CharArrayCopy(PML[i].CtrlHWVers, ThreadMap[i].CtrlHWVers, 20);
//CharArrayCopy(PML[i].CtrlSWVers, ThreadMap[i].CtrlSWVers, 40);
//CharArrayCopy(PML[i].CtrlNetVers, ThreadMap[i].CtrlNetVers, 20);
//CharArrayCopy(PML[i].CtrlDescr, ThreadMap[i].CtrlDescr, 40);
//CharArrayCopy(PML[i].MoldDataVers, ThreadMap[i].MoldDataVers, 20);
end; //for
finally
LockXY.Release;
end;//try
Result := UsedCount;
end;
我在c#处这么定义
[DllImport(DLLFILENAME)]
public static extern int GetMachineList(ref MachineListStruct MachineList);
是可以调用的,但是只能返一个结构的值,不能返回结构数组