使用Delphi呼叫C 編寫的DLL

2021-04-20 02:03:13 字數 1245 閱讀 3699

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中的函式和過程呼叫通過該物件 例項...