首页 新闻 会员 周边 捐助

关于C#调用C++接口的问题

0
悬赏园豆:30 [已解决问题] 解决于 2013-08-14 09:48

定义了两个结构体:

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# 这边该怎么办

不要急,没问题的主页 不要急,没问题 | 初学一级 | 园豆:51
提问于:2013-08-13 18:00
< >
分享
最佳答案
0

char* area 对应 [MarshalAs(LPStr)] string 

out_TMapChnInfo* channels  对应 IntPtr 或 LPStruct

收获园豆:30
Launcher | 高人七级 |园豆:45050 | 2013-08-14 09:31

我昨天查了MSDN。问题解决了

out_TMapInfo outMapinfo = new out_TMapInfo();
outMapinfo.channels = Marshal.AllocHGlobal(Marshal.SizeOf(outMapinfo));

channels 要在C#客户端这边先分配内存。

不要急,没问题 | 园豆:51 (初学一级) | 2013-08-14 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册