Я пытаюсь создать COM-компонент, используя ATL, и я хотел бы вызвать события для моего VB-клиента. Я нашел множество учебных пособий, каждый из которых, кажется, отличается в деталях, и ни один из них, кажется, не генерирует работающее решение. Вот что я делаю:
(с использованием Visual Studio 2008):
- Создайте новый проект библиотеки ATL. Я назвал это
ATLEventTest
.
- Представление класса: щелкнув правой кнопкой мыши на
ATLEventTest
, добавлен новый класс простых объектов ATL.
Я назвал это MyObject
, которое сгенерировало CMyObject
, IMyObject
и т. Д ...
Этот объект был создан с:
а) Резьба в квартире
б) агрегация
в) двойной интерфейс
d) ISupportErrorInfo
д) Точки подключения
Щелкните правой кнопкой мыши на CProxy_IMyObjectEvents<T>
, нажмите "Добавить функцию"
- Функция имеет тип возврата void с именем
someEvent
и принимает int testParam
.
- Rebuild.
(На этом этапе я должен быть в состоянии увидеть «точку подключения агрегата». Я не ...)
- Щелкните правой кнопкой мыши на
CMyObject
. «Добавить точку подключения»
- Перемещено '
_IMyObjectEvents
' в список.
- Сделал поиск кода в моем решении.
someEvent
нигде не могу найти!
- Снова добавлена функция
someEvent
. Теперь его можно найти в ATLEventTest_i.h
- Должен быть в состоянии вызвать
fire_someEvent(...)
в моем коде, но не может.
Это сводило меня с ума, пытаясь заставить это работать. Если кто-нибудь увидит, что я делаю не так, буду признателен за любые исправления, советы, хаки и т. Д.
В этот момент я испытываю желание сказать, винт мастеров, и просто попробуйте изменить c ++ и idl напрямую, но у меня есть ощущение, что может быть не намного лучше: (