- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在看 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_NOINTERFACE
。 Online docs for that error建议我使用了错误的线程模型。但是我已经尝试了 COINIT_MULTITHREADED
和 COINIT_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/
我是一名优秀的程序员,十分优秀!