使用Delphi呼叫C++編寫的DLL
1、C++編寫的DLL程式碼如下:
該Dll的功能比較簡單,就是實現一個整數加法;
IAddBase 是一個抽象類,IAdd實現了IAddBase的方法,並採用了單例模式;
GetAddInstance()為dll對外的介面,返回一個IAdd的物件指標;
呼叫者使用該例項就可以呼叫Add方法
- class IAddBase
- {
- public:
- int virtual __stdcall Add(int a, int b) = 0;
- };
- class IAdd : public IAddBase
- {
- private:
- static Idd* m_Instance;
- protected:
- IAdd(){}
- ~IAdd()
- {
- if (m_Instance != NULL)
- delete m_Instance;
- }
- public:
- int __stdcall Add(int a, int b)
- {
- return a + b;
- }
- static IAdd* GetAddInstance()
- {
- if (m_Instance == NULL)
- m_Instance = new Idd();
- return m_Instance;
- }
- };
- Idd* IAdd::m_Instance = NULL;
- extern "C" __declspec(dllexport) IAddBase* GetAddInstance()
- {
- return Idd::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';
- var
- myAdd : 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#呼叫c++編寫的dllC#C++
- C++編寫DLL的方法C++
- C#呼叫Delphi的dll之詳解C#
- DLL檔案在Delphi的建立及呼叫 (轉)
- C#呼叫 C++的DLLC#C++
- Python呼叫C++編寫的方法PythonC++
- C++呼叫 c#生成的dllC++C#
- C#呼叫匯編dllC#
- windows下如何使用QT編寫dll程式WindowsQT
- 在C#中使用C/C++寫的DLL (轉)C#C++
- DLL庫的編寫(匯出、匯入)與使用
- Java呼叫C/C++編寫的第三方dll動態連結庫(非nativeAPI)—JNIJavaC++API
- C++呼叫C#的動態庫dllC++C#
- 使用Delphi,SDK編寫Windows簡單程式 (轉)Windows
- Java呼叫C/C++編寫的第三方dll動態連結庫(非native API)--- JNIJavaC++API
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- 全方位解讀DLL檔案—編寫DLL
- 用Delphi編寫DelTree程式 (轉)
- 【C#學習筆記】呼叫C++生成的DLLC#筆記C++
- 使用使用rundll32 呼叫指定dll的方法
- 【05】瞭解C++默默編寫並呼叫那些函式C++函式
- 利用Delphi編寫IE擴充套件套件
- 利用DELPHI編寫WINDOWS外殼 (轉)Windows
- C# 呼叫 C++ 生成的 dll 關鍵實現部分C#C++
- Delphi使用VB編寫的ActiveX控制元件全攻略 (轉)控制元件
- Delphi中除錯dll方法除錯
- Delphi呼叫javasoJava
- 第四篇:瞭解 C++ 默默編寫並呼叫的函式C++函式
- 反射呼叫DLL反射
- Delphi編寫網路程式的安全措施 (轉)
- 用Delphi編寫安裝程式(1) (轉)
- 利用Delphi編寫IE擴充套件 (轉)套件
- 用QT在Windows下編寫dll程式QTWindows
- 條款05: 瞭解c++默默編寫並呼叫哪些函式C++函式
- 在Delphi中編寫控制元件的基本方法 (轉)控制元件
- C#網站呼叫C++非託管dll須知C#網站C++
- asp.net網頁中呼叫c#寫的dll檔案ASP.NET網頁C#
- NX二次開發-C#使用DllImport呼叫libufun.dll裡的UF函式(反編譯.net.dll)呼叫loop等UF函式C#Import函式編譯OOP