c# 调用c++写的dll,得到返回值问题
这个问题的前一个版本请移步到 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的值.
我的想法是先解决赋值问题,再解决字符串合并问题。现在第一个赋值问题如何解决。谢谢,不甚感激。