如何在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 项目。

如何在任何 Delphi 程序中使用 C++ DLL = 新的代理 DLL 项目

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

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

1
2
#include "stdafx.h"
#include "CppClass.h"

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

如何在任何 Delphi 程序中使用 C++ DLL - import-static-library

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

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

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

1
#define EXPORT comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值