Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

События COM

11
09 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
[SIZE=2]Пытаюсь подключиться к событиям, как сказано в [COLOR=#800080]этой статье [/COLOR][/SIZE]
[SIZE=2]Класс — обработчик событий:[/SIZE]

Код:
[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]


[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);


[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]

14
09 июля 2008 года
Phodopus
3.3K / / 19.06.2008
а #import есть?
11
09 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Phodopus
а #import есть?



*.tlb ?
Естественно! без него бы нескомпилилось...

14
10 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Есть придположение что объявление:
 
Код:
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

11
11 июля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Phodopus
Есть придположение что объявление:
 
Код:
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>
{
....
};

Debug Assertion Falied! исчез, но событие не ловится.
14
11 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: oxotnik333
Debug Assertion Falied! исчез, но событие не ловится.



боюсь что если написать версию typelib (5й, 6й параметры в 1.0) не сильно поможет, хотя..

Ну или могу предложить переслать мне код чтоб я на выходных поразбирался, да тока это и сервер автоматизации слать придется, да еще и сегодня до 7 по москве :) ..

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог