2011-08-11 4 views
0

내 나사로 (Lazarus) 코드에서 'ANN'라이브러리 (Approximate Nearest Neighbor)의 함수를 사용하고 싶습니다. 이 응용 프로그램은 C++로 작성되었으며 소스 코드와 함께 제공됩니다. Lazarus/FreePascal에서 함수에 어떻게 액세스 할 수 있습니까?Lazarus (freepascal)에서 생성 된 .dll 또는 .lib 파일에 정의 된 함수를 사용하는 방법은 무엇입니까?

편집 : Lazarus/FPC는 Delphi와 유사합니다.

+0

범프, 업데이트 된 답변보기 (QT 참조) –

답변

1

라이브러리에 따라 다릅니다. C++의 "C"하위 집합이거나 인터페이스가 특수하게 상호 운용되도록 제작 된 경우 opc0de의 대답을 참조하십시오. 이것이 중요한 신호는 "extern C {}"블록입니다.

라이브러리가 인 경우 C++ 인 경우 문제가있는 것입니다. C++에 대한 보편적 인 내보내기 메커니즘은 없으며 두 개의 서로 다른 C++ 컴파일러도 일반적으로 서로를 이해하지 못합니다.

이를 사용하려면 래퍼 (wrapper)를 만들어야합니다. 모든 C++ 코드를 랩핑하고/C/C++ 컴파일러로 컴파일 된 코드로 일반 C 함수 (extern C {}) 만 내 보냅니다.

예를 들어, QT를 래핑하는 QTPAS 래퍼를 살펴보십시오 Free Pascal/Delphi에서 사용하기 위해.

1

당신은 DLL에서 함수를 가져올 경우 C++ 라이브러리를 사용 cdecl을 경우이 매개 변수 전달 규칙을 나타내는 윈도우 라이브러리를 사용하고 stdcall

경우이

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

을 할 수

관련 문제