c#调用DLL如何返回结构数据

zsx222 zsx222 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
调用的是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);

是可以调用的,但是只能返一个结构的值,不能返回结构数组
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
zsx222
C# 111,129 成员 642,540 内容