[英]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.