【发布时间】:2014-01-01 08:27:28
【问题描述】:
我有一个unmanaged C++ code,我想将其转换为managed C# code,非托管代码如下所示,我已搜索但没有找到答案...我想知道编组的正确方法下面的代码,我不知道如何编组一个枚举,然后在一个结构中引用它。MMTPConxNack 结构是另一个结构内联合的成员。
层次结构如下图:
typedef enum
{
MMTPCnxNckRsn_NoAnswer=-2,
MMTPCnxNckRsn_SendError=-1,
MMTPCnxNckRsn_Ok=0,
MMTPCnxNckRsn_InvalidMember,
MMTPCnxNckRsn_HubNotReady,
MMTPCnxNckRsn_UnknownMember,
MMTPCnxNckRsn_LastCnxTooRecent,
MMTPCnxNckRsn_InvalidVersion,
MMTPCnxNckRsn_InvalidOptions,
MMTPCnxNckRsn_TooManyCnx
} MMTPCnxNckRsn;
typedef struct
{
MMTPCnxNckRsn Reason;
} MMTPConxNack;
typedef struct
{
long Length;
short Type;
union
{
MMTPConxReq ConxReq;
MMTPConxAck ConxAck;
MMTPConxNack ConxNack; // the structure with an enum inside
MMTPErrInd ErrInd;
} Data;
} MMTPMsg;
实际上我想编组 MMTPConxNack 结构..我使用 FieldOffset 来定义大小。提前致谢。
【问题讨论】:
-
需要查看更多代码,您所说的 FieldOffset 是什么?您实际上是将显示的代码移植到 C# 并通过网络进行编组,还是要将使用此代码创建的对象编组为用 c# 中的等效代码编写的新代码?
-
@norlesh ,上面的代码是非托管 c++ 代码...我想编组
MMTPConxNack结构..当我想编组它时我不确定什么是正确的方法,因为它有一个枚举成员,它在一个联合体内。因为联合体在其成员之间共享内存,所以我知道设置每个成员的大小很重要。 -
它是从哪里编组到哪里的?
-
我不明白为什么这很重要??..有一个非托管的win32 dll,我想调用它的方法,所以我使用编组..但是dll中的函数接收网络上的消息.
-
谢谢,不能给你逐字逐句的答案 - 但我在答案中链接到的文章应该给你你需要的一切
标签: c# c++ pinvoke marshalling