c# 调用c++写的dll,得到返回值问题

tokutoku2 tokutoku2 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个问题的前一个版本请移步到 http://bbs.csdn.net/topics/390429624?page=1#post-394296346

先总结一下 c# 调用c++写的dll
c++ 代码如下
extern "C" EXPORT_API int __stdcall GetString(char *& a)
{
a = "123564asdfasdfsadfsadfsda" ;
return 1;
}

c#
[DllImport...略....]
private static extern int GetString(ref IntPtr str);


IntPtr str = new IntPtr();
GetString(ref str);
IntPtr current = new IntPtr(str.ToInt32() + IntPtr.Size);
string temp;
temp = Marshal.PtrToStringAnsi(current);


c# 中得到 "123564asdfasdfsadfsadfsda" ,完整,ok.

我的需求是返回 10个座标数值,它们之间用“,”分割,这样我在c#中再去拆分。比如 "122,33,444,555,66,77,88,99,00,99" 。大概这样的,这些数值的是通过程序计算的,不是直接赋值给a。
于是我这样做。

v1
extern "C" EXPORT_API int __stdcall GetString(char *& a)
{
char * b = "123564asdfasdfsadfsadfsda" ;
a = b;
return 1;
}
得到 "64asdfasdfsadfsadfsda",少了"1235" 四个字符

v2
extern "C" EXPORT_API int __stdcall GetString(char *& a)
{
int i = 12345;
sprintf(a, "%d", i);
return 1;
}
编译可通过,c#中运行,直接down。错误提示 Expression:string!=NULL

v3
extern "C" EXPORT_API int __stdcall GetString(char *& a)
{
char b[20]={0};
int i = 12345;
sprintf(b, "%d", i);
a = b;
return 1;
}
没有错误提示,但是c#中,取不到a的值.

我的想法是先解决赋值问题,再解决字符串合并问题。现在第一个赋值问题如何解决。谢谢,不甚感激。
...全文
评论 13
收藏 已收藏
分享
返回顶部
tokutoku2
C++ 语言 65,214 成员 250,514 内容