C 呼叫 Delphi Dll鏈結庫方法及示例

2021-06-19 10:16:52 字數 1801 閱讀 7655

每種程式語言呼叫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函式

當前程式中呼叫 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()

當c#程式中呼叫  changes方法後,mynumber的值將會改變為100

以上為c#簡單呼叫delphi dll的方法。其中要注意的有:

dll檔案必須位於程式當前目錄或系統定義的查詢路徑中(即:系統環境變數中path所設定的路徑)。

返回變數型別、方法名稱、引數列表一定要與dll檔案中的定義相一致。

delphi DLL動態鏈結庫

假設有兩個應用程式,它們都要呼叫乙個單元中的乙個方法,那麼這兩個應用程式都要在uses語句中引用該單元。如果同時執行這兩個應用程式,這個方法就會在記憶體中存在兩份,這顯然是記憶體的一種浪費,使用動態鏈結庫就可以解決這個問題。動態鏈結庫dll與其他應用程式通過動態鏈結技術來共享 如果乙個應用程式使用了...

C呼叫C 鏈結庫

c呼叫c 鏈結庫 1.編寫c 編寫函式的時候,需要加入對c的介面,也就是extern c 2.由於c不能直接用 class.function 的形式呼叫函式,所以c 中需要為c寫乙個介面函式。例如本來要呼叫student類的talk函式,就另外寫乙個cfun 專門建乙個student類,並呼叫tal...

C 呼叫C鏈結庫

c 呼叫c鏈結庫 c 呼叫c語言的鏈結庫,其實相對c呼叫c 簡單。因為c 本來就向下相容c吧 個人見解 簡單說來原因就是未經處理的c 編譯後函式名可能變為 helloc 之類的,而c 編譯後函式名卻不是這樣,所以就對不上。詳細解釋見 需要在include c的檔案的時候加上extern c c.h ...