2010-01-09 170 views
3

我想用c#编写一个板子sdk的包装。在SDK中的功能实现是:结构指针

void WINAPI GetSysInfo(TC_INI_TYPE *TmpIni); 

即TC_INI_TYPE是如下的结构:

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_INI_TYPE

回答

4
[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); 
+1

看起来不错。不要忘记GetSysInfo声明。 – 2010-01-09 15:34:41

+0

虽然不确定64位系统上的对齐方式。我认为它是以8字节的边界对齐的。 – codekaizen 2010-01-09 15:51:27