C# 調用 Delphi Dll鏈接庫方法及示例


每種編程語言調用DLL的方法都不盡相同,在此只對用C#調用Delphi DLL的方法進行介紹

首先要搞清楚一點的是:什麼是託管,什麼是非託管?

一般可以認爲:非託管代碼主要是基於win 32平臺開發的DLL,activeX的組件,託管代碼是基於.net平臺開發的

C# 調用DLL中的非託管函數一般方法

首先,應該在C#語言源程序中聲明外部方法,其基本形式是:

[DLLImport(“DLL文件”)]

修飾符 extern 返回變量類型 方法名稱 (參數列表)

其中:

DLL文件:包含定義外部方法的庫文件。

修飾符: 訪問修飾符,除了abstract以外在聲明方法時可以使用的修飾符。

返回變量類型:在DLL文件中你需調用方法的返回變量類型。

方法名稱:在DLL文件中你需調用方法的名稱。

參數列表:在DLL文件中你需調用方法的列表。

注意:需要在程序聲明中使用System.Runtime.InteropServices命名空間。

      DllImport只能放置在方法聲明上。

DLL文件必須位於程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path所設置的路徑)。

返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。

下面結合示例如:

        [DllImport("TestDll.dll", EntryPoint = "SayHello")]      "TestDll.dll"爲dll名稱,EntryPoint 爲函數名
        static extern string SayHello(string Name);              //delphi 中的函數
        private string GetMessage()                                  //C#自己寫的函數,並調用Dll函數
        {
            return SayHello("");
        }

   當前程序中調用 GetMessage時就會返回Dll SayHello 函數的內容

  其中,Dll SayHello函數如下(Delphi語言):

 function SayHello(NameTool:PChar):PChar;stdcall;
  begin
    if Length(NameTool) <=0 then
      Result := PChar('Hello Person,welcome to chian.')
    else
      Result := PChar('Hello '+ NameTool + ', welcome to chian.');
  end;

另外,如果需要調用傳值,的方法時,通過Delphi的參數 var 與C#中的ref關鍵字結合使用如:

procedure ChangeNumber(var number:Integer);stdcall;
  begin
    number := 100;
  end;

C#調用如下:

private int MyNumber = 150;

[DllImport("TestDll.dll", EntryPoint = "ChangeNumber")]
 static extern void ChangeNumber(ref int count);
 private void Changes()
 {
     ChangeNumber(ref MyNumber);
 }

當C#程序中調用  Changes方法後,MyNumber的值將會改變爲100

以上爲C#簡單調用Delphi Dll的方法。其中要注意的有:

DLL文件必須位於程序當前目錄或系統定義的查詢路徑中(即:系統環境變量中Path所設置的路徑)。

返回變量類型、方法名稱、參數列表一定要與DLL文件中的定義相一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章