[英]Use C++ DLL callback function in a Delphi application
我嘗試在我的Delphi應用程序中使用C ++ DLL函數。 我在使用像這樣的回調函數時遇到問題:
用C ++導出的函數定義:
typedef void (__CDECL__* RegisterCallBacksFunction)(AudioChunkCallBackFunction, CaptureEventCallBackFunction, LogMngr*);
回調定義:
typedef void (__CDECL__*AudioChunkCallBackFunction)(AudioChunkRef, CStdString& capturePort);
typedef void (__CDECL__*CaptureEventCallBackFunction)(CaptureEventRef, CStdString& capturePort);
AudioChunkRef和CaptureEventRef:
typedef boost::shared_ptr<AudioChunk> AudioChunkRef;
typedef boost::shared_ptr<CaptureEvent> CaptureEventRef;
AudioChunk和CaptureEvent是C ++類:
class __declspec( dllexport ) AudioChunk // or CaptureEvent (both are similar)
{
public:
//some functions and variables
private:
//some functions and variables
};
C ++庫導出:
extern "C"
{
__declspec( dllexport ) void __CDECL__ RegisterCallBacks(AudioChunkCallBackFunction, CaptureEventCallBackFunction, LogMngr*);
}
如何在我的Delphi應用程序中使用RegisterCallBacks函數。 ?
不同語言(例如Pascal和C ++)的命名約定是非常復雜的主題。 至少C ++不允許從一個供應商遷移到另一供應商將為特定方法保留相同的導出名稱。 例如: Eleven@SomeClass@@QAEHXZ
是MSVC的int SomeClass::Eleven()
聲明。 唯一可行的方法是使用標准約定授予的extern "C"
C聲明。
但是上課呢? 為了避免重新發明輪子-對於Delphi-C ++使用OLE / COM的情況,通常,您將聲明接口,並且可以在兩邊都做同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.