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的值.
我的想法是先解决赋值问题,再解决字符串合并问题。现在第一个赋值问题如何解决。谢谢,不甚感激。
先总结一下 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的值.
我的想法是先解决赋值问题,再解决字符串合并问题。现在第一个赋值问题如何解决。谢谢,不甚感激。
...全文
相关推荐
JavaInvokeCS-master_JAVA调用C#dll_fightsk4_C#_
Java调用通过jni调用C#dll,实现跨语言调用
C#静态调用C++ dll,动态调用C++ dll和C++调用C# dll
最近碰到有关C#调用MFC dll的问题,查了很多资料,参考了不少的网上博客,做了如下总结,C#动静态调用C++ dll,C++调用C#dll。也算一个简单的自我整理,有问题也请提出来,共同进步。 C# 静态调非托管C++ dll 1)C++ dll中含代码 extern "C" __declspec(dllexport) int Add(int a,int b) {return
c#写的api查询
用c#写的程序 可以查询windows下的api的功能
C++调用C#的DLL实例程序
C++调用C#的DLL实例程序,压缩包中包含部分程序说明,很小的几行代码,但是C++调用C#的DLL目的已经达到。
基于C#调用c++Dll结构体数组指针的问题详解
下面小编就为大家分享一篇基于C#调用c++Dll结构体数组指针的问题详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


