1、c++編寫的dll**如下:
該dll的功能比較簡單,就是實現乙個整數加法;
iaddbase 是乙個抽象類,iadd實現了iaddbase的方法,並採用了單例模式;
getaddinstance()為dll對外的介面,返回乙個iadd的物件指標;
呼叫者使用該例項就可以呼叫add方法
class iaddbase
;class iadd : public iaddbase
~iadd()
public:
int __stdcall add(int a, int b)
static iadd* getaddinstance()
};idd* iadd::m_instance = null;
extern
"c" __declspec(dllexport) iaddbase* getaddinstance()
2、在delphi下呼叫該dll,這裡採用靜態呼叫方法
//在type中宣告iaddbase,相當於c++中的.h 檔案
type
iaddbase = class
public
function add(a, b : integer):integer;virtual;stdcall;abstract;
end;
function getaddinstance : iaddbase ; cdecl ; external 'testadd.dll';
varmyadd : iaddbase;
implemetation
//呼叫iaddbase中的add方法
function doadd(a,b:integer):integer;
begin
myadd := getaddinstance;
result := myadd.add(a,b);
end;
3、注意的問題
3.1 dll和delphi 定義的類函式需要宣告為stdcall,有疑問可以google關鍵字:delphi c++ stdcall
3.2 函式過載問題
如果在c++的dll中定義了乙個具有相同函式名的類,則在delphi中無法保證呼叫正確的函式,這裡要指出的是即使在定義時
宣告該函式為overload也無法保證正確呼叫dll中的對應函式
3.3函式定義的順序
delphi中定義的類函式的順序必須和c++ .h檔案中定義的類函式順序保持一致,否則呼叫將會出錯。
C 呼叫delphi編寫的dll
技術實現 如何逐步實現動態庫的載入,型別的匹配,動態鏈結庫函式匯出的定義,參考下面巨集定義即可 define libexport api extern c declspec dllexport 第一步,我先從簡單的呼叫出發,定義了乙個簡單的函式,該函式僅僅實現乙個整數加法求和 libexport a...
Delphi呼叫C 編寫的動態鏈結庫dll的方法
首先宣告這個dll中的函式,然後就可以直接呼叫了 function addnum num1,num2 integer integer stdcall external project1.dll name addnumber function addnum num1,num2 integer inte...
Delphi中高階DLL的編寫和呼叫
根據delphi提供的有關 dll編寫和呼叫的幫助資訊,你可以很快完成一般的 dll編寫和呼叫的 應用程式。本文介紹的主題是如何編寫和呼叫能夠傳遞各種引數 包括物件例項 的 dll。例如,主叫程式傳遞給 dll乙個adoconnection 物件示例作為引數,dll中的函式和過程呼叫通過該物件 例項...