Я просматриваю документацию MSDN, в которой говорится, что я могу CoCreateInstance SENS-объект, используя его CLSID .Однако неясно, означает ли __uuidof (SENS) что-либо - поскольку это всего лишь предварительное объявление в файле Sensevts.h.Кроме того, класс SENS предлагает только «исходящие» интерфейсы и помечен как «нереализуемый» (при просмотре через MS Com Viewer), поэтому я не знаю, как ссылаться на экземпляр самого объекта SENS.
ЭтоВ отличие от примера кода для получения экземпляра 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, как насчет IID, который я собираюсь использовать для SENS?В конечном итоге я хочу работать с интерфейсом SID IID_ISensLogon, но поскольку это исходящий интерфейс, я не могу себе представить, что имеет смысл использовать это здесь.Предположительно мне нужно поговорить с IConnectionPointContainer
интерфейсом SENS (несомненно, он реализует это, верно?), Чтобы я мог добраться до 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
. Онлайн-документы на эту ошибку предполагают, что я использую неправильную модель потоков.Но я пробовал и COINIT_MULTITHREADED
и COINIT_APARTMENTTHREADED
, и ни одна из них не изменяет ошибку.Есть какие-нибудь мысли?
Кстати, наиболее близкая вещь, которую я видел к рабочему примеру, - , приведенный в этой ссылке .