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文件中的定義相一致。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM