c#如何调用c/c++的dll库

wyman25 2010-08-26 10:13:56
我已经知道调用的语法,但我想知道以下两点:
1:这些非托管DLL是不是要实现什么接口,或者遵循某些协议,才能被C#调用?
2:是否能调用C语言写的DLL?或者说是否只能调用C++写的,不能调用C写的?
...全文
239 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wind_199 2010-08-26
  • 打赏
  • 举报
回复
互作有几种方式的:

1. P/Invoke , 就是导出函数, c# 那边 dllimport 的方式

2. com interop, c++ 编写 com 组件, c# 创建组件使用.

3. c++/cli 程序集, c# 可以直接引用使用.

4. 要是算上进程间通讯的, 那就更多了.
deyygywxf 2010-08-26
  • 打赏
  • 举报
回复
1.使用C++创建 DLL, 不需要实现接口, 但是你的方法需要外面被调用的话,应该申明为导出
2.不管是C写的还是C++写的DLL,只要符合1的条件,就可以被C# 或者其他语言调用
-小蕾- 2010-08-26
  • 打赏
  • 举报
回复
学习了。
problc 2010-08-26
  • 打赏
  • 举报
回复
_declspec(dllexport)
gomoku 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyq11 的回复:]
导出函数声明 extern "C"
[/Quote]
这个是错的。

用C惯例并不是必须,用C惯例是#3楼Bloodish朋友说的为了避免C++的混乱命名(C++会添加很多信息用于对付重载)。

导出函数可以:
方法1、提供一个.def的定义文件,并列举导出函数:
EXPORTS
; Explicit exports can go here
Func1
Func1
方法2、可以用微软的预编译命令_declspec(dllexport)来标注导出函数。
Dobzhansky 2010-08-26
  • 打赏
  • 举报
回复
互作有几种方式的:

1. P/Invoke , 就是导出函数, c# 那边 dllimport 的方式

2. com interop, c++ 编写 com 组件, c# 创建组件使用.

3. c++/cli 程序集, c# 可以直接引用使用.

4. 要是算上进程间通讯的, 那就更多了.
wuyq11 2010-08-26
  • 打赏
  • 举报
回复
导出函数声明 extern "C"
wuyq11 2010-08-26
  • 打赏
  • 举报
回复
[DllImport("a.dll", CharSet = CharSet.Auto)]
hyblusea 2010-08-26
  • 打赏
  • 举报
回复
创建一个C/C++的类,按照以下格式,在头文件中申明导出函数
extern "C" _declspec(dllexport) int TestMethod(int a);
然后在CPP文件,实现该方法.

你可以在网上下载一个<导出函数查看器>,可以看到这个方法...
bloodish 2010-08-26
  • 打赏
  • 举报
回复
要以C的方式导出extern "C"

C++由于函数可以重载,导出的函数名可能并不是原来的函数名.
hyblusea 2010-08-26
  • 打赏
  • 举报
回复
1.使用C++创建 DLL, 不需要实现接口, 但是你的方法需要外面被调用的话,应该申明为导出
2.不管是C写的还是C++写的DLL,只要符合1的条件,就可以被C# 或者其他语言调用
gomoku 2010-08-26
  • 打赏
  • 举报
回复
导出函数
C也可以做。

110,538

社区成员

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

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

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