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

How to use functions defined in a C++-produced .dll or .lib file within Lazarus (freepascal)?

本文关键字:dll lib 函数 定义 文件 Lazarus freepascal c++      更新时间:2023-10-16

我想在我的Lazarus代码中使用'ANN'库(近似近邻)的函数。这个应用程序是用c++编写的,并附带源代码。我如何从Lazarus/FreePascal内部访问函数?

编辑:Lazarus/FPC类似于Delphi

这取决于库。如果它是c++的"C"子集,或者如果接口是专门设计为可互操作的,请参阅opc0de的答案。这种情况的一个重要信号是"extern C{}"块。

如果库为true c++,则有问题。c++没有通用的导出机制,甚至两个不同的c++编译器通常也不能相互理解。

要使用它,必须创建一个所谓的包装器。用/same/c++编译器编译的一段代码,它包装了所有特定于c++的内容,只导出普通的C函数(extern C{})

作为一个例子,看看所谓的QTPAS包装器,它将QT封装在Free Pascal/Delphi中。

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

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

如果是c++库使用cdecl如果是windows库使用stdcall

这些表示参数传递约定