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);
是可以调用的,但是只能返一个结构的值,不能返回结构数组
结构如下:
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);
是可以调用的,但是只能返一个结构的值,不能返回结构数组
...全文
相关推荐
c#调用C++编写的dll,返回字符串
网上很多资料描述如何C++编写dll给C#调用,大多都是COPY来的,需要返回字符串的函数,却一个也没有,给初学者带来很大困惑,海量的查资料依然没有收获,终于尝试着自己写,搞成功了!VS2010环境 64位的操作系统测试OK。
C# 调用dll文件
一、DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现。 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL...
c#中如何调用外部DLL
每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍。
java调用C#封装的dll方法
java调用C#封装的dll方法 关于java调用C# 封装的DLL文件的方法 第一种:java利用JNA进行调用 思路:C#源码生成COM组件(dll和tlb文件),再利用C++进行封装,java通过JNA调用C++封装的DLL。 第二种:java利用jacob进行调用
C#生成DLL,以及调用该DLL
本文件主要是对C#生成DLL以及如何去调用自身生成的DLL进行简单的一个例子,方便大家对DLL的创建以及调用的理解。


