[SIZE=2][COLOR=#00ffff][COLOR=black]class[/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=black] ATL_NO_VTABLE CCCntrDispEvents :[/COLOR][/SIZE]
[SIZE=2][COLOR=black] public[/COLOR][/SIZE][SIZE=2][COLOR=black] CComObjectRootEx<CComSingleThreadModel>,[/COLOR][/SIZE]
[SIZE=2][COLOR=black] public[/COLOR][/SIZE][SIZE=2][COLOR=black] CComCoClass<CCCntrDispEvents, &CLSID_CCntrDispEvents>,[/COLOR][/SIZE]
[SIZE=2][COLOR=black] public[/COLOR][/SIZE][SIZE=2][COLOR=black] IDispatchImpl<ICCntrDispEvents, &IID_ICCntrDispEvents, &LIBID_SWEventsLib>,[/COLOR][/SIZE]
[SIZE=2][COLOR=black] public[/COLOR][/SIZE][COLOR=black][SIZE=2] IDispEventImpl<[/SIZE][SIZE=2]114[/SIZE][/COLOR][SIZE=2][COLOR=black], CCCntrDispEvents, &DIID_DSldWorksEvents>[/COLOR][/SIZE]
[SIZE=2][COLOR=black]{[/COLOR][/SIZE]
[SIZE=2][COLOR=black]public[/COLOR][/SIZE][SIZE=2][COLOR=black]:[/COLOR][/SIZE]
[SIZE=2]...[/SIZE]
[SIZE=2][SIZE=2][COLOR=#ffffff][COLOR=black]BEGIN_SINK_MAP(CCCntrDispEvents)[/COLOR][/COLOR][/SIZE][COLOR=#ffffff]
[SIZE=2][COLOR=black] SINK_ENTRY_EX([/COLOR][/SIZE][/COLOR][SIZE=2][COLOR=black]114[/COLOR][/SIZE][SIZE=2][COLOR=#ffffff][COLOR=black], DIID_DSldWorksEvents, swAppDocumentLoadNotify, DocumentLoadNotify)[/COLOR][/COLOR][/SIZE][COLOR=#ffffff]
[SIZE=2][COLOR=black]END_SINK_MAP()[/COLOR][/SIZE]
[SIZE=2][COLOR=black]STDMETHOD(DocumentLoadNotify)(BSTR docTitle, BSTR docPath)[/COLOR][/SIZE]
[SIZE=2][COLOR=black]{[/COLOR][/SIZE]
[SIZE=2][COLOR=black] return S_OK;[/COLOR][/SIZE]
[SIZE=2][COLOR=black]}[/COLOR][/SIZE]
[SIZE=2][COLOR=#000000].....[/COLOR][/SIZE]
[/COLOR][/SIZE]
События COM
[COLOR=#800080]этой статье [/COLOR][/SIZE]
[SIZE=2]Класс — обработчик событий:[/SIZE]
[SIZE=2]инициализация:[/SIZE]
[SIZE=2]в результате в дебаге вываливается:[/SIZE]
[SIZE=2][SIZE=2]Debug Assertion Falied![/SIZE]
in....
[SIZE=2]Expression: !InlineInEqualGUID (*m_plibid< GUID_NULL) && Did you forget to pass the LIBID to CComModule::Init?[/SIZE]
[/SIZE]
[SIZE=2]Пытаюсь подключиться к событиям, как сказано в
[SIZE=2]Класс — обработчик событий:[/SIZE]
Код:
[SIZE=2]инициализация:[/SIZE]
Код:
CComPtr<ISldWorks> spApp;
spApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);
CComObject<CCCntrDispEvents> *m_pCntrDispEvents;
CComObject<CCCntrDispEvents>::CreateInstance(&m_pCntrDispEvents);
m_pCntrDispEvents->AddRef();
HRESULT hr = m_pCntrDispEvents->DispEventAdvise(spApp);
ATLASSERT(!hr);
spApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);
CComObject<CCCntrDispEvents> *m_pCntrDispEvents;
CComObject<CCCntrDispEvents>::CreateInstance(&m_pCntrDispEvents);
m_pCntrDispEvents->AddRef();
HRESULT hr = m_pCntrDispEvents->DispEventAdvise(spApp);
ATLASSERT(!hr);
[SIZE=2]в результате в дебаге вываливается:[/SIZE]
Цитата:
[SIZE=2][SIZE=2]Debug Assertion Falied![/SIZE]
in....
[SIZE=2]Expression: !InlineInEqualGUID (*m_plibid< GUID_NULL) && Did you forget to pass the LIBID to CComModule::Init?[/SIZE]
[/SIZE]
[SIZE=2]в релизе ошибки никакой не вылетает, но и событие не ловит.[/SIZE]
[SIZE=2]В чем может быть дело?[/SIZE]
а #import есть?
Цитата: Phodopus
а #import есть?
*.tlb ?
Естественно! без него бы нескомпилилось...
Код:
public IDispEventImpl<114, CCCntrDispEvents, &DIID_DSldWorksEvents>
неполное, ибо согласно спецификации третий параметр:
Цитата:
The pointer to the IID of the event dispinterface implemented by this class. This interface [COLOR="Red"]must[/COLOR] be defined in the type library denoted by plibid, wMajor, and wMinor
где plibid - четвертый параметр, который у тебя дефолтовый и равен GUID_NULL
Цитата: Phodopus
Есть придположение что объявление:
неполное, ибо согласно спецификации третий параметр:
где plibid - четвертый параметр, который у тебя дефолтовый и равен GUID_NULL
Код:
public IDispEventImpl<114, CCCntrDispEvents, &DIID_DSldWorksEvents>
неполное, ибо согласно спецификации третий параметр:
где plibid - четвертый параметр, который у тебя дефолтовый и равен GUID_NULL
переписал объявление так:
Код:
class ATL_NO_VTABLE CCntrDispEvents :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCntrDispEvents, &CLSID_CntrDispEvents>,
public IDispatchImpl<ICntrDispEvents, &IID_ICntrDispEvents, &LIBID_SWPublished>,
public IDispEventImpl<114, CCntrDispEvents, &DIID_DSldWorksEvents, &LIBID_SWEventsLib>
{
....
};
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCntrDispEvents, &CLSID_CntrDispEvents>,
public IDispatchImpl<ICntrDispEvents, &IID_ICntrDispEvents, &LIBID_SWPublished>,
public IDispEventImpl<114, CCntrDispEvents, &DIID_DSldWorksEvents, &LIBID_SWEventsLib>
{
....
};
Debug Assertion Falied! исчез, но событие не ловится.
Цитата: oxotnik333
Debug Assertion Falied! исчез, но событие не ловится.
боюсь что если написать версию typelib (5й, 6й параметры в 1.0) не сильно поможет, хотя..
Ну или могу предложить переслать мне код чтоб я на выходных поразбирался, да тока это и сервер автоматизации слать придется, да еще и сегодня до 7 по москве :) ..