MIDL.Почему интерфейс обратного вызова c ++ не обновляется после добавления метода в idl? - PullRequest
0 голосов
/ 04 июля 2011

Я пытаюсь реализовать интерфейс обратного вызова с COM techonlogy и иметь IDL, как это:

library LogstreamScannerLib
{
    importlib("stdole2.tlb");
    [
        uuid(8CACF064-EF0E-4496-92D5-F26C64A5858A)      
    ]
    dispinterface _IMyClassEvents
    {
        properties:
        methods:    
            [id(1)] void SomeMethod([in] int data); 
    };

    [
        uuid(AFC03FCD-01A9-4F38-994F-BA98E57FF64E)      
    ]   
    coclass MyComClass
    {
        [default] interface IMyClass;
        [default, source] dispinterface _IMyClassEvents;
    };


};

Обратите внимание, что в IMyClass есть объявление SomeMethod, но я не могу понять, почему оно не появляется в моих автоматически сгенерированных классах, когда я перекомпилирую / пересобираю проект.

Он всегда объявляется пустым:

   MIDL_INTERFACE("8CACF064-EF0E-4496-92D5-F26C64A5858A")
    _IMyClassEvents : public IDispatch
    {
    };

Что я тут не так делаю?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Я предполагаю, что вы имеете в виду использование точек подключения COM? Вот ссылка на документацию Точки подключения ATL в MSDN.

Если вы пытаетесь выяснить, как создать прокси-класс события, посмотрите на пункт 4 в Добавление точек подключения к объекту , и вот MSDN учебник для добавления событие Вы можете создавать классы прокси событий столько раз, сколько захотите.

Я обнаружил, что мне всегда нужно искать, где генерировать прокси-классы ...

0 голосов
/ 11 июля 2011

Наконец, я обнаружил проблему.

Когда вы используете «Мастер реализации точки подключения», вы должны выбрать пункт «Создать точку подключения» из «Библиотеки типов» (вместо «IDL»).Вы видите этот выбор в выпадающем списке и должны изменить значение по умолчанию IDL -> Тип Lib.

...