Как преобразовать структуру C ++ в структуру C # - PullRequest
0 голосов
/ 16 ноября 2009

Мне нужно преобразовать сложную структуру 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 dim Array 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;                             
    } ;

Скажите, пожалуйста, как это сделать ...

Бала

1 Ответ

0 голосов
/ 29 апреля 2015

Я знаю, что через 6 лет это бесполезно, но в любом случае конвертер из здесь отлично сработал для меня ...

...