указатель структуры - PullRequest
       10

указатель структуры

3 голосов
/ 09 января 2010

Я хочу написать упаковщик для доски SDK с C #. Реализация функции в 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.

1 Ответ

4 голосов
/ 09 января 2010
[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); 
...