C# 结构指针
我想用c为board sdk编写包装器。sdk中的功能实现为:C# 结构指针,c#,wrapper,C#,Wrapper,我想用c为board sdk编写包装器。sdk中的功能实现为: void WINAPI GetSysInfo(TC_INI_TYPE *TmpIni); 该TC_INI_类型的结构如下所示: typedef struct { WORD wCardNo; WORD wCardType; WORD wConnect; WORD wIRQ;
void WINAPI GetSysInfo(TC_INI_TYPE *TmpIni);
该TC_INI_类型的结构如下所示:
typedef struct {
WORD wCardNo;
WORD wCardType;
WORD wConnect;
WORD wIRQ;
char cbDir[LEN_FILEPATH];
WORD wAddress[MAX_CARD_NO];
WORD wMajorVer;
WORD wMinorVer;
WORD wChType[MAX_CHANNEL_NO];
} TC_INI_TYPE;
如何为结构TC\u INI\u TYPE
编写包装器
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 4)]
public struct TC_INI_TYPE
{
public short wCardNo;
public short wCardType;
public short wConnect;
public short wIRQ;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 32)] // change 32 to LEN_FILEPATH
public char[] cbDir;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 32)] // change 32 to MAX_CARD_NO
public short[] wAddress;
public short wMajorVer;
public short wMinorVer;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 32)] // change 32 to MAX_CHANNEL_NO
public short[] wChType;
}
您可能还希望根据需要更改包值
对于GetSysInfo,请执行以下操作:
[DllImport("")]
private static extern void GetSysInfo([In,Out] ref TC_INI_TYPE tcIniType);
不过,对于64位系统上的对齐方式不太确定。我认为它是在8字节边界上对齐的。