Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结构指针_C#_Wrapper - Fatal编程技术网

C# 结构指针

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;

我想用c为board sdk编写包装器。sdk中的功能实现为:

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字节边界上对齐的。