c# 调用delphi dll 传结构体参数
Delphi里的一个结构如下:TParaBuf=record
ComNo:integer; //串口号
Baud:integer; //波特率 (一般设为115200)
Sys_Sec:array [1..3] of integer; //系统扇区1,2,3 (一般设为0,1,2)
User_Sec:array [1..3] of integer; //用户扇区1,2,3 (一般设为3,4,5,可以自由设置)
AuthorNo:array [1..6] of PChar; //授权码1,2,3,4,5,6 (该授权码由授权卡内的授权码计算得到。)
end;
TPParaBuf=^TParaBuf; //指向以上结构的指针。
我要在C#里改写 ,该怎么传呢,望赐教,在线等啊,不好意思,分就这么多了 --------------------编程问答-------------------- 自己先顶一下 --------------------编程问答-------------------- 哎,一看就知道是弄IC卡的.弄发卡器吧.
TParaBuf=record
ComNo:integer; //串口号
Baud:integer; //波特率 (一般设为115200)
Sys_Sec:array [1..3] of integer; //系统扇区1,2,3 (一般设为0,1,2)
User_Sec:array [1..3] of integer; //用户扇区1,2,3 (一般设为3,4,5,可以自由设置)
AuthorNo:array [1..6] of PChar;
结构体对齐就是内存要对齐.它这里使用了默认的DELPHI字节对齐方式,你在定义结构体的时候也要.
按照上面的定义一个C#版本,然后packed = 4就可以了. --------------------编程问答--------------------
我这样定义的,不知对不对
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
public struct TParaBuf
{
[MarshalAs(UnmanagedType.LPStr)]
public int ComNo;
[MarshalAs(UnmanagedType.LPStr)]
public int Baud;
[MarshalAs(UnmanagedType.LPStr)]
public int Sys_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public int User_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public string AuthorNo;
} --------------------编程问答--------------------
我这样定义的,不知对不对
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
public struct TParaBuf
{
[MarshalAs(UnmanagedType.LPStr)]
public int ComNo;
[MarshalAs(UnmanagedType.LPStr)]
public int Baud;
[MarshalAs(UnmanagedType.LPStr)]
public int Sys_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public int User_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public string AuthorNo;
}
补充:.NET技术 , C#