2009-11-16 8 views
0

복잡한 C++ 구조체를 C# 구조체로 변환해야하는데, C#으로 다른 구조체를 변환했습니다.이 중 일부는 2 차원 배열을 포함하고 있습니다.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;    
    } 
0123이 내가 제대로 변환 다른 구조입니다

내 구조,

C는 ++이다

내가 변환 할이 구조는,이 2 희미한 배열 C++이 있습니다, 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#에서 내 시도이다, 그러나 그것은 나에게 오류를주고있다 :

[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

나는 t를 알고하는 방법을 가르쳐주세요 그의 길에서 6 년은 쓸모가 없다. 그러나 어쨌든 here의 컨버터는 나를 위해 잘 작동했다 ...

관련 문제