Попробуйте использовать метод, описанный в этом месте:
Добавление события (ATL) @ MSDN
С именами примеров, которые вы указали выше, в вашем файле MyObject.idl вы должны увидеть декларацию для вашего исходящего даже в разделе для dispinterface _IMyObjectEvents. Поскольку вы щелкнули правой кнопкой мыши на CProxy_IMyObjectEvents <T>, а не на _IMyObjectEvents в библиотеке, ваш IDL, вероятно, не имеет определения. Файл сгенерированный автоматически файл _IMyObjectEvents_CP.h должен присутствовать в файлах заголовков проекта и должен содержать метод Fire_someEvent () в результате правильного добавления метода. Если нет, вы можете обнаружить, что он просто создал метод с именем someEvent ().
Вот схема, которую вы можете попробовать в тестовом проекте.
- Создайте новый проект ATL DLL. Я назвал его ATLEventTest1.
- Построить проект.
- Вид класса: щелкните правой кнопкой мыши на ATLEventTest1, добавьте новый класс ATL Simple Object. Назовите это MyObject.
- Создайте определение с помощью а) Thread Threading b) Двойной интерфейс c) Точки подключения и все, что вам нужно.
- Перестроить проект.
- Вид класса: найдите библиотеку ATLEventTest1Lib, щелкните правой кнопкой мыши на _MyObjectEvents и «Добавить метод».
- Метод имеет тип void return, называемый someEvent, и принимает int testParam с атрибутом параметра [in].
- Вы должны увидеть «[in] int testParam» в результате добавления параметра.
- На вкладке «Атрибуты IDL» измените идентификатор, если это необходимо. Нажмите «Готово».
- Вид класса: щелкните правой кнопкой мыши на CMyObject, перейдите в «Добавить ...», перейдите к «Реализация точки подключения».
- Выберите _IMyObjectEvents и нажмите «>», чтобы переместить его в список реализованных точек подключения. Нажмите «Готово».
- Перестроить.
- Теперь, в вашем классе CMyObject, вы должны иметь возможность вызвать Fire_someEvent (). Вы увидите новый метод в вашем файле ATLEventTest1.idl под разделителем _IMyObjectEvents; файл заголовка _IMyObjectEvents_CP.h будет создан и создаст широковещательный код для Fire_someEvent ().