gpt4 book ai didi

c++ - 在纯 C++ 的 COM 中需要有关事件的帮助!

转载 作者:行者123 更新时间:2023-11-30 03:10:39 25 4
gpt4 key购买 nike

伙计们!非常重要的问题:

请看my project (300Kb) .我不能使用 MFC/ATL,只能使用纯 C++。

我有 COM 库 (niapi.dll),但没有可用的源/ header ,只有 dll。

有用于连接服务器的类(NiApi::SrvrSession),类有登录事件处理程序(NiApi::SrvrSession::OnLogin)。

我用过

#import "NiApi.dll"

生成包装器/信息,

然后

ISrvrSessionPtr session(L"NiApi.SrvrSession");

创建对象,然后尝试

session->put_OnLogin();

要分配事件,但没有一个 put_On 或这样的成员。

niapi.tlh 内部有_ISrvrSessionEvents 结构,但它与SrvrSession 没有关系。

我需要使用来自 NiApi::SrvrSession 的事件来处理连接状态。

求救,不然老大杀了我! (抱歉英语不好,我读的比说的好;)

最佳答案

COM 事件通过连接点处理。您需要编写自己的 COM 对象来实现您感兴趣的任何事件接口(interface)。然后您需要将它连接到触发事件的 COM 对象。首先你QI它的IConnectionPointContainer的COM对象,然后找到事件接口(interface)的GUID对应的连接点。您调用它的 Advise 方法将其连接到您的事件接收器。

class CSrvrSessionEvents: public _ISrvrSessionEvents
{
public:
HRESULT OnLogin(long LoginResult)
{
// do something
return S_OK;
}
// implement rest of _ISrvrSessionEvents
};

ISrvrSession* pSrvrSession = ...; // get ISrvrSession from somewhere
_ISrvrSessionEvents* pSrvrSessionEvents = new CSrvrSessionEvents();
IConnectionPointContainer* pCPC = NULL;
pSrvrSession->QueryInterface(IID_IConnectionPointContainer, &pCPC);
IConnectionPoint* pCP = NULL;
pCPC->FindConnectionPoint(__uuidof(_ISrvrSessionEvents), &pCP);
DWORD dwCookie = 0;
pCP->Advise(pSrvrSessionEvents, &dwCookie);
pSrvrSession->Connect(); // I assume this fires some events
pCP->Unadvise(dwCookie);

关于c++ - 在纯 C++ 的 COM 中需要有关事件的帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2993674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com