C#程序调用c++的dll,怎样把dll中函数返回的数组赋值给c#程序中的数组

shanshui0121 2012-09-21 07:26:28
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#中读出来
...全文
262 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanshui0121 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

首先你的C代码就有问题,buffer是一个数组,而数组是保存在栈中的,你函数一返回就平栈了,那么buffer中的值很可能就已经变了。
第二,C#的函数声明应该是
[DllImport("dll.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]
public static extern I……
[/Quote]

我的题目没写清楚
c++编写的dll中的函数:
static char buffer[50];
char *A(unsigned char buf[])
{
for(int i=0;i<50;i++)
{
buffer[i]=buf[50];
}
return buffer;
}
C#中调用:
byte [] b =new byte[50]{1,1,1,1,1,1,1,1,1};
[DllImport("dll.dll")]
public static extern char A(char buf);
char [50]a;
a=A(b);//有问题????

怎么把buffer[50]中的数据,赋值给C#中的a数组
qldsrx 2012-09-23
  • 打赏
  • 举报
回复
[DllImport("<Unknown>", EntryPoint="A")]
public static extern System.IntPtr A(byte[] buf) ;
bigbaldy 2012-09-23
  • 打赏
  • 举报
回复
首先你的C代码就有问题,buffer是一个数组,而数组是保存在栈中的,你函数一返回就平栈了,那么buffer中的值很可能就已经变了。
第二,C#的函数声明应该是
[DllImport("dll.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr A(string buf);
取值用Marshal.PtrToStringAnsi(A(b));
shanshui0121 2012-09-23
  • 打赏
  • 举报
回复
c++编写的dll中的函数:
static char buffer[50];
char *A(unsigned char buf[])
{
for(int i=0;i<50;i++)
{
buffer[i]=buf[50];
}
return buffer;
}
C#中调用:
byte [] b =new byte[50]{1,1,1,1,1,1,1,1,1};
[DllImport("dll.dll")]
public static extern char A(char buf);
char [50]a;
a=A(b);//有问题????

怎么把buffer[50]中的数据,赋值给C#中的a数组
Pigeon汪 2012-09-23
  • 打赏
  • 举报
回复
可以用回调函数
mywayss 2012-09-22
  • 打赏
  • 举报
回复
怎么用啊
shanshui0121 2012-09-22
  • 打赏
  • 举报
回复
怎么用啊
null 2012-09-22
  • 打赏
  • 举报
回复
野指针

110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧