如何将 C++ 结构转换为 C# 结构

Posted

技术标签:

【中文标题】如何将 C++ 结构转换为 C# 结构【英文标题】:How to Convert a C++ Structure into C# Structure 【发布时间】:2009-11-16 04:07:24 【问题描述】:

我需要将一个复杂的 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;                             
     ;

请告诉我该怎么做……

由巴拉

【问题讨论】:

您介意正确格式化吗? 你指的是什么错误?它编译吗?或者你得到一个运行时错误? 【参考方案1】:

我知道这在 6 年后有点没用,但无论如何,here 的转换器对我来说工作得很好......

【讨论】:

以上是关于如何将 C++ 结构转换为 C# 结构的主要内容,如果未能解决你的问题,请参考以下文章

将 C++ 结构转换为 C# 以用于 UDP 通信

如何正确地将这些转换为 c#,marshall,以便我可以将这些结构传递给 DLL (c++)?

将结构列表从 c# 转换为 c++

如何将结构从 C++ 迁移到 C#

将包含结构的 c++ 函数传递给 C#,并使用 Marshal.PtrToStructure 将其转换为 c# 函数

如何将 System::^array 从 C# 函数转换为 C++ 中的等效数据类型