定义了两个结构体:
struct out_TMapInfo { /*!< 图的id(不为0,用于区分具体图标识) */ unsigned long map_id; /*!< 图的父id(如果为0表示区域下的第一级子节点) */ unsigned long pid; /*!< 所属区域 */ char* area; /*!< 名称 */ char* name; /*!< 图的crc32验证码 */ unsigned long crc32; /*!< 图的大小(不能大于4G) */ unsigned long size; /*!< 用户自定义数据 */ unsigned long userdata; /*!< 图绑定的通道信息 */ out_TMapChnInfo* channels; /*!< 通道个数 */ unsigned long count; }; struct out_TMapChnInfo { /*!< 通道oid */ char* oid; /*!< x坐标值 */ double x; /*!< y坐标值 */ double y; /*!< 用户自定义数据 */ unsigned long userdata; };
C#调用方式
IntPtr outMapinfo = new IntPtr();
int result = NativeMethods.createMapInfo(outMapinfo);
调用成功,outMapinfo有值
当我调用Marshal.PtrToStructure(outMapinfo, typeof(out_TMapInfo)); 出现错误
我想问一下结构体还是包含结构体指针,在C# 这边该怎么办
char* area 对应 [MarshalAs(LPStr)] string
out_TMapChnInfo* channels 对应 IntPtr 或 LPStruct
我昨天查了MSDN。问题解决了
out_TMapInfo outMapinfo = new out_TMapInfo();
outMapinfo.channels = Marshal.AllocHGlobal(Marshal.SizeOf(outMapinfo));
channels 要在C#客户端这边先分配内存。