參考自: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();
}
編譯運行,即可。