Delphi呼叫C 編寫的動態鏈結庫dll的方法

2021-07-07 05:36:10 字數 1461 閱讀 1229

//首先宣告這個dll中的函式,然後就可以直接呼叫了

function addnum(num1,num2:integer):integer;stdcall;external 'project1.dll' name 'addnumber';

//function addnum(num1,num2:integer):integer;stdcall;external 'add_dll_test.dll' name 'addnumber';

procedure tform1.button1click(sender: tobject);

varnum1,num2:integer;

sum:integer;

begin

num1:=strtoint(edit1.text);

num2:=strtoint(edit2.text);

sum:=addnum(num1,num2);

edit3.text:=inttostr(sum);

end;

procedure tform1.button2click(sender: tobject);

type

//這裡的taddfunc即是project1.dll中的addnumber方法

taddfunc=function (x,y:integer):integer;stdcall;

varonehandle:thandle;

addfunc:taddfunc;

num1,num2:integer;

sum:variant;

begin

num1:=strtoint(edit1.text);

num2:=strtoint(edit2.text);

onehandle:=loadlibrary('project1.dll');   //動態載入dll,並返回其控制代碼

tryif onehandle <> 0 then

addfunc:=getprocaddress(onehandle,'addnumber');    //獲取內部函式的位址

if (@addfunc <> nil) then

begin

sum:=addfunc(num1,num2);  //實際的**函式

edit3.text:=inttostr(sum);

endelse

raiselastwin32error;  //異常處理

finally

freelibrary(onehandle);   //呼叫完畢**dll占用的資源

end;

end;

1.檢視函式名:

在dll檔案的資料夾下,用「shift+滑鼠右鍵」選擇「在此處開啟命令視窗」,輸入「tdump ***.dll」,檢視內部的函式名

2.使用函式位置(不推薦)

addfunc:=getprocaddress(onehandle,makeintresource(1));

C 呼叫delphi編寫的dll

技術實現 如何逐步實現動態庫的載入,型別的匹配,動態鏈結庫函式匯出的定義,參考下面巨集定義即可 define libexport api extern c declspec dllexport 第一步,我先從簡單的呼叫出發,定義了乙個簡單的函式,該函式僅僅實現乙個整數加法求和 libexport a...

使用Delphi呼叫C 編寫的DLL

1 c 編寫的dll 如下 該dll的功能比較簡單,就是實現乙個整數加法 iaddbase 是乙個抽象類,iadd實現了iaddbase的方法,並採用了單例模式 getaddinstance 為dll對外的介面,返回乙個iadd的物件指標 呼叫者使用該例項就可以呼叫add方法 class iaddb...

Delphi動態呼叫C 寫的DLL

c dll 檔案,建議用最簡單的c 編輯工具。不會加入很多無關的dll檔案。本人用codeblocks mingw。不像 vs2010,dll編譯成功,呼叫的時候會提示缺其他dll。系統生成的main.h和main.cpp ifndef main h define main h include to...