1. 程式人生 > WINDOWS開發 >C#呼叫外部dll檔案

C#呼叫外部dll檔案

參考自: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();
}

編譯執行,即可。