【发布时间】:2012-01-07 19:39:30
【问题描述】:
我尝试在我的 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 函数。 ?
【问题讨论】:
-
查看 Rudy 的 Delphi 角,了解如何扁平化 C++ 对象接口,articles-cppobjs
-
@LURD 我不是 C++ 专家,但我怀疑
boost类型的对象也是一种特殊类型的 C++ 类,可能需要额外的管理。