如何将 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#,marshall,以便我可以将这些结构传递给 DLL (c++)?