日期:2014-05-17  浏览次数:20964 次

C#程序调用c++的dll,怎样把dll中函数返回的数组赋值给c#程序中的数组
dll的函数是
char *A(char buf[])
{
  char buffer[50]={};
  return buffer;
}
C#中调用
char [] b =new char[50]{};
[DllImport("dll.dll")]
public static extern char A(char buf);
A(b);

怎么把buffer[50]中的数据在C#中读出来

------解决方案--------------------
野指针
------解决方案--------------------
[DllImport("<Unknown>", EntryPoint="A")]
public static extern System.IntPtr A(byte[] buf) ;
------解决方案--------------------
可以用回调函数
------解决方案--------------------
首先你的C代码就有问题,buffer是一个数组,而数组是保存在栈中的,你函数一返回就平栈了,那么buffer中的值很可能就已经变了。
第二,C#的函数声明应该是
[DllImport("dll.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr A(string buf);
取值用Marshal.PtrToStringAnsi(A(b));