2010-01-09 6 views
3

Je veux écrire un wrapper pour une carte SDK avec C#. la mise en œuvre de la fonction dans sdk est:pointeur de structure

void WINAPI GetSysInfo(TC_INI_TYPE *TmpIni); 

que TC_INI_TYPE est une structure comme suit:

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; 

comment je peux écrire wrapper pour la structure TC_INI_TYPE.

Répondre

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; 
} 

Vous pouvez également modifier la valeur du pack en fonction de ce dont vous avez besoin.

Pour GetSysInfo, procédez comme suit:

[DllImport("")] 
private static extern void GetSysInfo([In,Out] ref TC_INI_TYPE tcIniType); 
+1

semble bon. Ne pas oublier la déclaration GetSysInfo. –

+0

Je ne suis pas sûr de l'alignement sur un système 64 bits, cependant. Je pense que c'est aligné sur les limites de 8 octets. – codekaizen

Questions connexes