Как использовать функции, определенные в файле .dll или .lib, созданном на C++, в Lazarus (freepascal)?

Я хочу использовать функции из библиотеки 'ANN (приблизительный ближайший сосед) в мой код Лазаря. Это приложение написано на C++ и поставляется с исходным кодом. Как я могу получить доступ к функциям из Lazarus/FreePascal?

Редактировать: Lazarus/FPC похож на Delphi.


person Mike Furlender    schedule 11.08.2011    source источник
comment
Bump, см. обновленный ответ ниже (ссылка на QT)   -  person Marco van de Voort    schedule 17.08.2011


Ответы (2)


Это зависит от библиотеки. Если это подмножество «C» C++ или если интерфейс специально создан для обеспечения взаимодействия, см. ответ opc0de. Важным сигналом того, что это так, является блок «extern C {}».

Если библиотека true C++, у вас проблема. Для C++ не существует универсального механизма экспорта, и даже два разных компилятора C++ обычно не понимают друг друга.

Чтобы использовать его, вы должны создать так называемую оболочку. Фрагмент кода, скомпилированный с помощью /same/ компилятора C++, который упаковывает все специфичное для C++ и экспортирует только простые функции C (extern C{})

В качестве примера взгляните на так называемую обертку QTPAS, которая обертывает QT для использования в Free Pascal/Delphi.

person Marco van de Voort    schedule 14.08.2011

Если вы хотите импортировать функцию из dll, вы можете сделать это

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

Если это библиотека C++, используйте cdecl, если это библиотека Windows, используйте stdcall

Они представляют соглашения о передаче параметров

person opc0de    schedule 11.08.2011