社区
C#
帖子详情
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#中读出来
...全文
314
8
打赏
收藏
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#中读出来
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
野指针
C#
调用
C++
DLL
传递结构体
数组
的终极解决方案
在项目开发时,要
调用
C++
封装的
DLL
,普通的类型
C#
上一般都对应,只要用
Dll
Import传入从
DLL
中
引入
函数
就可以了。但是当传递的是结构体、结构体
数组
或者结构体指针的时候,就会发现
C#
上没有类型可以对应。这时怎么办,第一反应是
C#
也定义结构体,然后当成参数传弟。然而,当我们定义完一个结构体后想传递参数进去时,会抛异常,或者是传入了结构体,但是
返回
值却不是我们想要的,经过调试跟踪后发现,那些值
C#
与
C++
编写的
dll
调用
——double
数组
/一维/二维
传入参数
C++
:double*——
C#
:double[]
C++
代码块: //.cpp //将传入的
数组
所有值增加1后
返回
_declspec(
dll
export) void test_double_group(double *test, int num) { int j = 1; for (int i = 0; i <num; i++) { test[i] += 1; } }...
C#
调用
C++
dll
函数
传参及参数类型转换
一、简述 在
C#
中
调用
C++
版的
dll
函数
时,因为是不同的语言,参数类型也不尽相同,需要做一些转换。因为在网上能找到的答案也是很杂乱,对此不懂的人会搞到发狂。最近碰到一些项目需要在
C#
中
调用
C++
版
dll
,所以一通捣鼓,总结了部分经验。【提示:
C#
调用
C++
库,需要
dll
和lib就可以了,不需要头文件】 二、亲测有效的一些参数类型转换 1、基本类型int、float、bool,
C++
中
与
C#
中
是相同的; (1)
C++
dll
函数
void init(int a, float b, bool
(已更新)关于混合编程
中
C#
调用
C/
C++
DLL
碰到具有
数组
、指针的参数或
返回
的解决办法(亲测)!
更新部分直接看文章最后! 如题,最近一段一直在搞工控类项目的上位机调度软件开发,由于扫描模块是余博用
C++
写的, 所以涉及到混合编程的问题了。
C#
调用
C++
DLL
的方法网上都有,把
DLL
放进exe的生成目录内,然后引用System.Runtime.InteropServices命名空间,然后在主类内部加上外部引用声明就好了。 [
Dll
I...
C#
调用
非托管
DLL
函数
一 概念 运行时处于控制之下的代码称为托管代码,反之,在运行环境(runtime)之外运行的代码称为非托管代码。 平台
调用
(来自consuming unmanaged
dll
functions)是一个可以使托管代码
调用
在
DLL
中
实现的非托管
函数
,例如那些win32 API。它找到和
调用
导出的
函数
,同时根据需要将
函数
的参数(整形,字符,
数组
,结构体等等)通过互操作边界(interopera
C#
111,129
社区成员
642,532
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章