gpt4 book ai didi

c++ - 如何为 SENS 事件注册接收器对象

转载 作者:可可西里 更新时间:2023-11-01 09:49:30 33 4
gpt4 key购买 nike

我在看 MSDN 文档说我可以 CoCreateInstance a SENS object using its CLSID .但是,尚不清楚 __uuidof(SENS) 是否意味着什么——因为它只是 Sensevts.h 文件中的前向声明。此外,SENS 类仅提供“传出”接口(interface),并被标记为“不可创建”(通过 MS Com Viewer 查看),这让我不知道如何引用 SENS 对象本身的实例。

这与获取 instance of IShellLink 的示例代码形成对比:

HRESULT     hr;
IShellLink* pISL;

hr = CoCreateInstance ( CLSID_ShellLink, // CLSID of coclass
NULL, // not used - aggregation
CLSCTX_INPROC_SERVER, // type of server
IID_IShellLink, // IID of interface
(void**) &pISL ); // Pointer to our interface pointer

此处 ShellLink 简称为“IShellLink”。很公平。但是我应该使用什么类型(除了 void*)来接收 SENS 的实例?除了 CLSID 问题,我打算用于 SENS 的 IID 又如何呢?最终我想使用 SENS 的 IID_ISensLogon 接口(interface),但因为它是一个传出接口(interface),我无法想象在这里使用它是有意义的。大概我需要与 SENS 的 IConnectionPointContainer 接口(interface)对话(肯定它实现了那个,对吧?)以便我可以访问 ISensLogon。

简而言之,有人可以告诉我示例代码是什么样子的,以便我可以调用“Advise()”并开始从 SENS 接收事件吗?

更新我正在取得一些进展,因此我的代码现在看起来像这样:

#import <es.dll>
#include <EventSys.h>
using namespace EventSystemLib;

//...
::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
do {

IEventSystemPtr evSystem;
HRESULT hr = evSystem.CreateInstance(CLSID_CEventSystem);
if (!SUCCEEDED(hr)){
break;
}

IEventSubscriptionPtr evSubscriber;
hr = evSystem.CreateInstance(CLSID_CEventSubscription);
if (!SUCCEEDED(hr)){
break;
}

}while (false);

问题是 CLSID_CEventSubscription 的创建失败,HRESULT 代码 E_NOINTERFACEOnline docs for that error建议我使用了错误的线程模型。但是我已经尝试了 COINIT_MULTITHREADEDCOINIT_APARTMENTTHREADED 并且都没有改变错误。有什么想法吗?

顺便说一句,我见过的最接近工作示例的是 given in this link .

最佳答案

根据MSDN的其他部分,您不会创建 SENS 对象。如果我没有看错,您可以创建一个 IEventSystem (CLSID_CEventSystem) 实例,查询它以获取感兴趣的 SENS 发布者/事件类,然后向它们注册您的订阅。

编辑:对于您的新问题,我不确定根本原因,但我发现不使用 IEventSubscriptionPtr 似乎可行:

    // Works
CComPtr<::IEventSubscription> pSub2;
hr = pSub2.CoCreateInstance(CLSID_CEventSubscription);

// Doesn't work
IEventSubscriptionPtr evSubscriber;
hr = evSystem.CreateInstance(CLSID_CEventSubscription);

关于c++ - 如何为 SENS 事件注册接收器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217878/

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