MIDL。为什么在将方法添加到idl后,回调c ++接口没有更新?

时间:2011-07-04 08:46:35

标签: c++ com atl midl

我尝试使用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 个答案:

答案 0 :(得分:2)

我认为您的意思是使用COM连接点?以下是MSDN中ATL Connection Points文档的链接。

如果您正在尝试弄清楚如何生成事件代理类,请查看Adding Connection Points to an Object中的第4点,此处是MSDN tutorial,用于添加事件。您可以根据需要多次重新生成事件代理类。

我发现我总是要去寻找生成代理类的地方......

答案 1 :(得分:0)

最后,我发现了这个问题。

使用“实施连接点向导”时,应选择从“类型库”(而不是“IDL”)生成连接点。您在组合框中看到此选项,并应更改默认选项IDL - >输入Lib。