COM对象中的回调

我有一个公开COM对象的ATL项目。 我希望我的COM对象随时调用消费者指定的函数,或者通过其他方式不时地通知消费者。

我曾尝试在CerberusNative.idl中添加一个方法,以便使用void函数指针,我想从COM实例端调用,以便消费者只需在初始化时告诉COM对象它的回调是什么:

interface ICerberusSession : IDispatch {
    [id(5)] HRESULT SetCallbacks([in] void(*userExit)(int, char *), [in] void(*userAttemptingReconnection)(), [in] void(*userReconnected)());
};

但是,我的void函数指针有一些问题:

严重级代码说明项目文件行抑制状态错误对象接口中的MIDL2269过程必须返回HRESULT:[(Parameter'userExit')]错误MIDL2131参数不能是一个函数:过程'SetCallbacks'的'参数'userExit' ICerberusSession')]

我可以通过哪些方式获得客户端应用程序来订阅COM对象中的回调函数?


做到这一点的正确方法是定义一个独立的接口和其上的方法,并将该接口传递给我的setter方法:

[
    object,
    uuid(AECE8D0C-F902-4311-A374-ED3A0EBB6B49),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface ICallbacks : IUnknown
{
    [id(1)] HRESULT UserExit([in] int errorCode, [in] BSTR errorMessage);
    [id(2)] HRESULT UserAttemptingReconnection();
    [id(3)] HRESULT UserReconnected();
};

[
    object,
    uuid(B98A7D3F-651A-49BE-9744-2B1D8C896E9E),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface ICerberusSession : IDispatch {
    ...
    [id(5)] HRESULT SetCallbacks([in] ICallbacks* callbacks);
};
链接地址: http://www.djcxy.com/p/81315.html

上一篇: Callbacks in COM objects

下一篇: How do you reference a WCF service in a COM interop enabled DLL?