【问题标题】:Using C++ functions in Delphi在 Delphi 中使用 C++ 函数
【发布时间】:2018-12-16 19:07:46
【问题描述】:

我正在尝试导入在 C++ 库中创建的一些函数,以便在 delphi 中使用。这是我要使用的库:https://github.com/NGSolve/netgen/blob/master/nglib/nglib.h

我在谷歌上环顾四周,发现我必须从这个头文件中创建一个 .dll 文件,然后以某种方式在 delphi 中导入这些函数。问题是我不知道我该怎么做!

你们能帮帮我吗?提前致谢!!

【问题讨论】:

  • 我的网站上有很多关于这方面的信息:Using C object files in DelphiUsing C++ objects in Delphi,也许还有更多。
  • 代码的目的是使头文件可用于使用 DLL (__declspec(dllimport)) 以及生成 DLL (__declspec(dllexport)),取决于 NGLIB_EXPORTSnglib_EXPORTS 其他地方的#define。

标签: c++ delphi


【解决方案1】:

有两种主要方法可以做到这一点。两者都要求您从代码中生成 DLL。我无法详细解释如何执行此操作。但在我的网站上,我确实为您提供了详细信息和一些示例代码。请参阅下面的链接。

主要有两种方式

  • 展平对象。将对象的每个方法包装成一个普通函数并从 DLL 中导出。该对象只是作为某种句柄或无类型指针传递。您不能直接使用该对象,因此无需键入指针或句柄。 这是最简单的解决方案,但对于 DLL 的用户来说不如下一个方便:

  • 将您的对象转换为 COM 接口并编写一个函数来实例化它。 这远非易事,但使 DLL 更易于使用。

我的文章Using C++ objects in Delphi 中描述了这两种方式。

您可以在我的其他文章中找到更多信息:

【讨论】:

  • 感谢您的帖子!我会调查的!顺便说一句,你能解释一下我编辑的第一篇文章中代码的目的是什么吗? (它是github.com/NGSolve/netgen/blob/master/nglib/nglib.h中库文件的一部分
  • 头文件 .h 告诉 C++ 编译器它链接到哪些函数。 cpp 文件包含实现代码,必须编译成目标文件或库。然后将所有这些链接到一个程序或 DLL 中。只需阅读文章和相关文章。这不是很简单,但也不是那么难。只是需要一些时间来熟悉该做什么的细节。这是一些工作好吧。
  • 注意:您需要的不仅仅是 .h 文件。您需要来自 github.com/NGSolve/netgen/tree/master/nglib 的 GitHub 存储库中的完整代码(您可以将其作为 zip 下载)。 .h 文件只是 C++ 编译器生成可执行文件所需的文件之一。您甚至必须编写更多 C 代码才能使用 .cpp 文件中的实际代码。
  • 看起来你得到的东西可能不足以生成一个 DLL。我看到代码引用了许多不在存储库中的文件。您可能还需要作者的其他一些存储库的代码。祝你好运找到然后编译它,特别是如果你以前从未这样做过(FWIW,看看 make 文件)。如果我是你,我会尝试寻找其他代码。
【解决方案2】:

到目前为止,您只能在 Delphi 中使用纯 C API 接口。所以也许先尝试用普通的 C 函数调用来包装 C++ API。

【讨论】:

  • 我明白.. 基本上这是一个网格工具(netgen),我想在我的 delphi 应用程序中使用它的功能。据我了解,首先我要制作这个头文件的 C 包装器,将其编译成 dll,然后我可以在 delphi 中使用它?
  • @MafiaSkafia 是的,这就是你需要做的。
  • 这里有几个不错的入门视频 - 易于学习。 C++ Builder - Dynamic Link LibrariesC++ Builder - Static Libraries.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多