Здравствуйте, Щербатов Евгений, Вы писали: ЩЕ>Подскажите плиз, где я прокололся? Ведь не может быть, что в МС добавили поддержку атрибутов, а генерация ошибок у них работать перестала? Нигде не прокололся. Таки перестала работать генерация ошибок. Что собственно происходит? При компиляции "attributed" проекта на компилятор вставляет в твой код некоторые вставки на основании тех атрибутов которые ты ему прописал. Эти вставки можно просмотреть, если указать опцию /Fx. При указанииэтой опции тебе компилятор для каждого файла f.x в который он вставлял код сгенерирует файл f.mrg.x (то есть между именем и расширением файла добавляется mrg), в котором будут аккуратно помечены все вставки которые он за тебя сделал. Так вот — посмотрим что же он там нагенерил. Заметим что поскольку твой выызов идет из VB, то ты неявно пользуешься функцией Invoke интерфейса IDispatch, поскольку больше ничем бейсик пользоваться не умеет. Как раз Invoke и вставляет тебе компилятор (помимо всего прочего). Вот прирмерно как она выглядит:
Обрати внимание на кусок которыый я пометил курсивом — в нем и есть ошибка. Для того чтобы в VB пришла твоя ошибка должна быть заполнена EXCEPINFO *pExcepInfo, а она нигде не заполняется — поэтому ошибка и не проходит. Там должно было бы быть что-то вроде
Как же с этим бороться? Самый простой способ борьбы вглядит примерно так: у тебя в .h файле где-то написано примерно так:
вместо этого надо написать так:
В этом случае код для Invoke вставляться не будет, а будет взят из IDispatchImpl, а там он правильный |