C#调用C++ dll中关于char * 类型做返回值调用说明

c++ 中是如下定义的

  extern "C" __declspec(dllexport) int test(int id, char *retstr, int *strLen);

其中 retstr 参数会在C++代码里修改后返回给调用者,后面的strLen为字符串的实际长度。

C#该如何调用呢?

按正常的网上说法,char* 是可以对应到string,

[DllImport("test.dll", EntryPoint = "test", CallingConvention = CallingConvention.Cdecl)]  
        public extern static int test(int engineId,  string retStr, ref int strLen);

但是如果使用char*的话,就会报内存地址不能访问的错误,经过查找,需要使用IntPtr才能正常返回。

[DllImport("test.dll", EntryPoint = "test", CallingConvention = CallingConvention.Cdecl)]  
        public extern static int test(int engineId,  IntPtr retStr, ref int strLen);

 调用:

  

IntPtr retStrPtr= Marshal.AllocHGlobal(1024);

  调用返回:

  string retStr = Marshal.PtrToStringAnsi(retStrPtr,strLen);

 至此,可以正常获取返回数据!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值