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

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

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

Ответы [ 2 ]

1 голос
/ 14 августа 2011

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

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

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

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

1 голос
/ 11 августа 2011

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

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

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

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

...