Проблема с обработкой событий от ActivXа
От: Advance  
Дата: 20.06.02 15:05
Оценка:
Помогите пожалуйста, мозг взрывается уже.
Проблема такова.
Поключился к событиям некоего АктивХ контрола. (TeeChart, может кто сталкивался)
в "событийнтом" интерфейсе контрола есть методы, принимаюшие параметры нестандартных типов. Примерно так

typedef [...]
    enum { ssShift = 1,
        ssAlt = 2,
        ssCtrl = 4,
        ssNone = 0
    } EShiftState;

    [...    ]
    dispinterface ITChartEvents {
        properties:
        methods:
            void OnMouseMove( [in] EShiftState Shift, [in] long X, [in] long Y);
    };



У себя реакцию на событие описываю как

[сcode]
void __stdcall OnMouseMoveTChart(EShiftState Shift, long X, long Y) ;
[/сcode]

Добавляю ее в карту :

 SINK_ENTRY_EX(1, __uuidof(ITChartEvents), 0x14 , OnMouseMoveTChart)



При перемещении мышки над контролом вываливается ассерт на строчку в атлсом.н

HRESULT hr = DispCallFunc(&thunk, 0, info.cc, info.vtReturn, info.nParams, info.pVarTypes, pVarArgs, Result);
ATLASSERT(SUCCEEDED(hr));


hr соответсвует E_BADARG.

Все остальные события, которые приходят от контрола, но содержат аргументы только простых типов (long, bool), приходят нормально, ассерта не вызывают. Проблема только с enum-ами. Нет чтоб лонгами их описать...

Как я понял, в DispCallFunc происходит попытка вызвать мою функцию OnMouseMoveTChart. Пришли к ней из IDispEventImpl::Invoke. Шли долго, но пришли правильно. Сама DispCallFunc находится в OleAuto.dll.
Вот что заметил странного в ее аргументах, когда собираемся вызвать OnMouseMoveTChart: тип первого параметра (EShiftState Shift) в info.pVarTypes (это массив типов агруметов) проходит как VT_USERDEFINED, а в pVarArgs (массиве самих аргументов) как VT_I4. Видимо собака порылась в этом, но что с этим делать мне непонятно.
Подскажите пожалста, как быть
Спасибо.
Сергей.
Re: Проблема с обработкой событий от ActivXа
От: algol Россия about:blank
Дата: 21.06.02 05:06
Оценка: 10 (2)
Здравствуйте Advance, Вы писали:

A>Помогите пожалуйста, мозг взрывается уже.

A>Проблема такова.
A>Поключился к событиям некоего АктивХ контрола. (TeeChart, может кто сталкивался)
A>в "событийнтом" интерфейсе контрола есть методы, принимаюшие параметры нестандартных типов.

A>Все остальные события, которые приходят от контрола, но содержат аргументы только простых типов (long, bool), приходят нормально, ассерта не вызывают. Проблема только с enum-ами. Нет чтоб лонгами их описать...

A>Вот что заметил странного в ее аргументах, когда собираемся вызвать OnMouseMoveTChart: тип первого параметра (EShiftState Shift) в info.pVarTypes (это массив типов агруметов) проходит как VT_USERDEFINED, а в pVarArgs (массиве самих аргументов) как VT_I4. Видимо собака порылась в этом, но что с этим делать мне непонятно.

См. Q237771: "BUG: Events Fail in ATL Containers when Enum Used as Event Parameter"
Re[2]: Проблема с обработкой событий от ActivXа
От: Advance  
Дата: 21.06.02 10:21
Оценка:
Спасибо!!
Re[3]: Проблема с обработкой событий от ActivXа
От: retalik www.airbandits.com/
Дата: 24.06.02 03:34
Оценка: 1 (1)
Здравствуйте Advance, Вы писали:
A>Спасибо!!
Для "спасибо" есть кнопки с цифирками, 1-3.
Или ты хочешь, чтобы этот человек тебе больше не подсказывал?
Успехов,
Виталий.
Re[4]: Проблема с обработкой событий от ActivXа
От: Advance  
Дата: 24.06.02 05:58
Оценка:
Здравствуйте retalik, Вы писали:

A>>Спасибо!!

R>Для "спасибо" есть кнопки с цифирками, 1-3.
Сорри, сразу не заметил.

R>Или ты хочешь, чтобы этот человек тебе больше не подсказывал?

Неужели такое страшное наказание за первую же ошибку, тем более что я исправился
Сергей.
ЗЫ. Для извинений кнопок не нашел
Re[5]: Проблема с обработкой событий от ActivXа
От: retalik www.airbandits.com/
Дата: 24.06.02 06:09
Оценка:
Здравствуйте Advance, Вы писали:

A>>>Спасибо!!

R>>Для "спасибо" есть кнопки с цифирками, 1-3.
A>Сорри, сразу не заметил.
Сорри, я не знал, что ты недавно здесь.

R>>Или ты хочешь, чтобы этот человек тебе больше не подсказывал?

A>Неужели такое страшное наказание за первую же ошибку, тем более что я исправился
Это не наказание, это жизненное наблюдение.
Успехов,
Виталий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.