【问题标题】:MIDL. Why callback c++ interface doesn't renewed after method added to idl?中。为什么将方法添加到idl后回调c ++接口不更新?
【发布时间】:2011-09-27 23:46:45
【问题描述】:

我尝试用 COM 技术实现回调接口并拥有这样的 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
    {
    };

我在这里做错了什么?

【问题讨论】:

    标签: c++ com atl midl


    【解决方案1】:

    我假设您的意思是使用 COM 连接点?这是 MSDN 中ATL Connection Points 文档的链接。

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

    我发现我总是要去寻找在哪里生成代理类...

    【讨论】:

    • 谢谢你,@Shane!我已经阅读了那篇文章,但看起来我做的一切都是正确的。当我尝试通过向导将方法添加到连接点时,我被告知它们应该出现在 MIDL 文件中 - 它对我来说失败了。 MIDL 界面保持不变
    • 老实说,我从来没有使用VS IDE来修改IDL文件,我只是手动编辑它......我发现它更容易。
    【解决方案2】:

    终于找到问题了。

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

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2010-10-25
      • 2014-08-27
      • 2014-08-07
      • 2010-11-21
      • 2013-08-12
      • 1970-01-01
      • 2020-05-21
      • 2017-08-11
      相关资源
      最近更新 更多