2009-11-16 117 views
0

我需要將一個複雜的C++結構轉換爲C#結構,我已經在C#中轉換了其他結構,這個包含了一些二維數組,這是什麼問題如何改變它,這裏是我的結構,如何將C++結構轉換爲C#結構

這是其它結構,這是我正確轉換,

C++:

typedef struct 
{ 
    BYTE    sSerialNumber[DH_SERIALNO_LEN];  BYTE    byAlarmInPortNum;  
    BYTE    byAlarmOutPortNum; 
    BYTE    byDiskNum; 
    BYTE    byDVRType; 
     BYTE    byChanNum;   
} NET_DEVICEINFO, *LPNET_DEVICEINFO; 

C#:

public struct NET_DEVICEINFO 
    { 
     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] 
     public byte[] sSerialNumber;  
     public byte byAlarmInPortNum;  
     public byte byAlarmOutPortNum;  
     public byte byDiskNum;    
     public byte byDVRType;    
     public byte byChanNum;    
    } 

而這個結構,我想轉換,這有2維數組 C++:

typedef struct 
{ 
    DWORD    dwSize; 
    DWORD    dwDecProListNum;  
    char    DecProName[DH_MAX_DECPRO_LIST_SIZE][DH_MAX_NAME_LEN]; 
    DH_485_CFG   stDecoder[DH_MAX_DECODER_NUM]; 
    DWORD    dw232FuncNameNum;  
    char    s232FuncName[DH_MAX_232FUNCS][DH_MAX_NAME_LEN]; 
    DH_RS232_CFG  st232[DH_MAX_232_NUM]; 
} DHDEV_COMM_CFG; 

,這是我在C#中嘗試,但它給我一個錯誤, C#:

[StructLayout(LayoutKind.Sequential, Pack = 2, CharSet = CharSet.Auto)] 
    public struct DHDEV_COMM_CFG 
    { 
     public uint dwSize; 
     public uint dwDecProListNum;  
     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] 
     public string[] DecProName;        
     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] 
     DH_485_CFG[] stDecoder; 
     public uint dw232FuncNameNum; 
     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
     public string[] s232FuncName;       
     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] 
     public DH_RS232_CFG[] st232;        
    } ; 

請告訴我如何到這個....

通過巴拉

+0

你介意格式正確嗎? – Gonzalo

+1

你指的是什麼錯誤?它是否編譯?或者你有運行時錯誤? –

回答

0

我知道ŧ他是有點沒用6年的道路上,但在任何情況下,從here轉換器很好地爲我工作...