如何在Lazarus (freepascal)中使用c++生成的.dll或.lib文件中定义的函数
How to use functions defined in a C++-produced .dll or .lib file within Lazarus (freepascal)?
我想在我的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
这些表示参数传递约定
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 解析引用 |exe/dll vs lib
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 从 .lib 文件创建一个.dll文件
- 可执行文件C++包括.obj,.lib和.dll吗?
- 无法在 DLL 中链接 SDL2-static.lib
- 链接器找不到导入的 DLL 的 LIB 文件
- C++:重命名dll和lib并链接
- C++ CLR dll 需要 .lib 文件,但非 CLR 不需要
- 如何找出依赖于LIB文件的DLL列表?
- 链接 .lib 并在 Windows 中使用 .dll 在 C++ 在 Eclipse 中
- 将标头和 lib 转换为 dll 以将其与 c# 一起使用
- 为什么我的程序寻找共享资源.dll而不是Commons.lib
- 从.dll中调用.lib in C
- GHCi 无法在 Windows 上加载.dll lib(C++ lib)
- 如果在 DLL/Lib 中定义了对象,是否可以在客户端中实例化对象?
- "/MD /MT"和"dll lib"之间的概念歧义
- 在dll/lib上创建链接
- 如何检查 dll/lib 中的函数是否在 windows 中"C"?