如何在Delphi 程序中调用任意 C++ DLL动态链接库

如何在Delphi 程序中调用任意 C++ DLL动态链接库

互联网上有大量有用的 C++ 库。我们也在这个博客上展示了C++ 的许多伟大用途。C++ 通常具有极高的性能。如果我们有 C++ 库的源代码,我们就可以创建一个包,然后我们就可以在 Delphi 程序中使用 C++。尽管 C++ 库的源代码通常不可用。在商业 C++ 库中,通常只获得几个 C++ 头文件和静态库文件 (.lib),而没有任何随附的 .cpp 源文件。因此,在这种情况下,当我们想在 Delphi 应用程序中使用那些 C++ 库时,我们可以使用代理 DLL 来实现。

如何创建一个代理DLL来连接C++ DLL和Delphi?

要将 Delphi 连接到 DLL,DLL 应该公开一个简单的 Windows API 样式 API,而不是 C++ 的东西。我们可以使用任何 C++ 编译器来编译代理 DLL。

Embarcadero Dev-Cpp 开源编译器

视觉工作室

我们举一个简单的例子。假设我们有一个 DLL 文件和一个带有此声明的更难的文件,而没有带有实现的 .cpp 文件。您可以在此链接中参考此示例的源代码:

https://github.com/PacktPublishing/Delphi-High-Performance/tree/master/Chapter%208/StaticLib1

1

2

3

4

5

6

7

8

9

10

#pragma once

class CppClass

{

int data;

public:

CppClass();

~CppClass();

void setData(int);

int getSquare();

};

下面介绍如何在带有代理dll的Delphi程序中使用C++库

现在我们需要创建代理DLL。

使用您喜欢的 IDE 创建一个新的 C++ DLL 项目。

它会自动添加“dllmain.cpp”文件。但是我们需要另一个单元来包装静态库。添加名为“StaticLibWrapper.cpp”的新单元。

现在我们应该在我们的项目中包含我们想要导入的静态库的头文件。

1

2

#include "stdafx.h"

#include "CppClass.h"

现在将静态库的头文件复制到项目文件夹中。现在我们应该在我们的项目中包含静态库。为此,将静态库文件夹添加到库目录中:

或者在 Visual Studio 中转到“配置属性 | 链接器 | 一般 | 其他库目录 设置”。

如何将 C++ DLL 函数标记为“已导出”

现在我们定义一个宏来标记 DLL 函数被导出。

1

#define EXPORT comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)

相关推荐

王者荣耀绝版英雄大全 王者荣耀绝版英雄有哪些
365现在还能安全提款吗

王者荣耀绝版英雄大全 王者荣耀绝版英雄有哪些

📅 07-01 👁️ 2219
3-0!1-0!中国男足两胜韩国,盼主场再创奇迹,目标锁死孙兴慜!_手机网易网
luna洁面仪是哪个国家的? 露娜洁面仪可以天天用吗 露娜洁面仪好用吗多少钱?
如何使用 Apple 诊断程序测试您的 Mac
365登录次数限制

如何使用 Apple 诊断程序测试您的 Mac

📅 07-03 👁️ 2974
je suis une enfant
365登录次数限制

je suis une enfant

📅 06-27 👁️ 3603
如何保存网页内容 web档案
365现在还能安全提款吗

如何保存网页内容 web档案

📅 06-29 👁️ 1563
著名书法家柳公权楷书代表作品介绍
365现在还能安全提款吗

著名书法家柳公权楷书代表作品介绍

📅 07-02 👁️ 9037
下载中心
365现在还能安全提款吗

下载中心

📅 06-29 👁️ 6563
世界杯故事:万人迷贝克汉姆 从大罪人到大英雄
365登录次数限制

世界杯故事:万人迷贝克汉姆 从大罪人到大英雄

📅 06-29 👁️ 3045