参考自:https://www.cnblogs.com/lhyqzx/p/5970406.html
一、.dll文件介绍
dll文件(Dynamic Link Library)又称动态链接库,不能直接被执行,也不能接收消息,包含能被程序或者其他dll文件调用的函数(方法),须由进程载入才可发挥作用。
优点:
- 使用较少的资源,减少磁盘和物理内存中加载的代码的重复量
- 推进模块式体系结构,有助于模块式程序的开发
- 简化部署和安装,部署和安装dll不要求重新建立与该dll链接的程序
二、dll的调用
- 托管:基于.net平台开发的
- 非托管:主要是基于win32平台开发的dll,activeX的组件
调用的基本形式:
[DLLImport("DLL文件")]
修饰符 extern 返回变量类型 方法名称 (参数列表);
注意:
- 需要在声明中使用System.Runtime.InteropServices命名空间
- DLLImport只能放在方法声明上
- dll文件必须位于程序当前目录或者系统定义的查询路径中
三、.实例
1.C#动态加载dll中的非托管函数
(1)新建C#窗体工程(Add_func):
- 在Form中加入一个button和一个text控件,命名button为calButton,text命名为resultNum。
- 在Form.cs文件中,使用System.Runtime.InteropServices命名空间。
(2)新建C++ Win32项目工程(Count)
- 在里面新建一个Count.cpp源文件,插入如下代码:
extern "C" _declspec(dllexport)int _stdcall count(int a, int b);
//计算函数
int _stdcall count(int a, int b)
{
int _a = a;
int _b = b;
return _a + _b;
}
- F7编译生成dll文件,将Debug目录下的Count.dll文件拷贝到Add_func/bin/Debug下面。
(3)为calButton添加一个click事件,并加入如下代码:
[DllImport("Count.dll")]
static extern int count(int a, int b);
//求和按钮
private void calButton_Click(object sender, EventArgs e)
{
int a = 6, b = 4;
int result = count(a, b);
resultNum.Text = result.ToString();
}
编译运行,即可。