如何在 Lazarus (freepascal) 中使用 C++ 生成的 .dll 或 .lib 文件中定义的函数?

发布于 2024-11-29 02:22:28 字数 191 浏览 4 评论 0原文

我想使用 'ANN' 库(近似最近邻)中的函数我的拉撒路代码。该应用程序是用 C++ 编写的,并附带源代码。如何从 Lazarus/FreePascal 中访问这些功能?

编辑:Lazarus/FPC 与 Delphi 类似。

I want to use functions from the 'ANN' library (Approximate Nearest Neighbor) in my Lazarus code. This application is written in C++, and comes with source code. How can I access the functions from within Lazarus/FreePascal?

Edit: Lazarus/FPC is similar to Delphi.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

握住我的手 2024-12-06 02:22:28

这取决于图书馆。如果它是 C++ 的“C”子集,或者接口经过专门设计以实现互操作,请参阅 opc0de 的答案。表明这种情况的一个重要信号是“extern C {}”块。

如果库是true C++,那么就有问题了。 C++ 没有通用的导出机制,甚至两个不同的 C++ 编译器通常也无法相互理解。

要使用它,您必须创建一个所谓的包装器。使用 /same/ C++ 编译器编译的一段代码,包装所有 C++ 特定内容,并且仅导出纯 C 函数 (extern C{})

作为示例,请查看所谓的 QTPAS 包装器,它包装 QT 以在 Free 中使用帕斯卡/德尔福。

It depends on the library. If it is the "C" subset of C++, or if the interface is specially crafted to be interoperable, see opc0de's answer. An important signal that this is the case is an "extern C {}" block.

If the library is true C++, you have a problem. There is no universal exporting mechanism for C++, and even two different C++ compilers generally don't understand eachother.

To use it, you must create a so called wrapper. A piece of code compiled with the /same/ C++ compiler that wraps everything C++ specific and only exports plain C functions (extern C{})

As an example, have a look at the so called QTPAS wrapper, that wraps QT for use in Free Pascal/Delphi.

小矜持 2024-12-06 02:22:28

如果你想从 dll 导入一个函数,你可以这样做

function ExportedFunctionName(parameters):ResultType;cdecl;external 'library.dll';

如果是一个 c++ 库,使用 cdecl 如果是一个 windows 库,使用 stdcall

这些代表参数传递约定

If you want to import a function from a dll you can do this

function ExportedFunctionName(parameters):ResultType;cdecl;external 'library.dll';

If is a c++ library use cdecl if is a windows library use stdcall

These represent the parameter passing conventions

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文