接口 1 的一个 函数 要 用 到 接口2 的 指针 ,
接口2 的一个函数 要用到 接口1 的指针 ,
接口2 和 接口 1 都在同一个 IDL 文件中 ,这种 相互引用 怎么解决 ?

解决方案 »

  1.   

    显示的释放一次Interface1.Detach()
    {
        if(Interface2)
        {
            Interface2.Release();
            Interface2 = NULL;
        }
       ....
    }
    Interface2.Detach()
    {
        if(Interface1)
        {
            Interface1.Release();
            Interface1 = NULL;
        }
       ....
    }外面在释放这2个接口前,先调用 Interface.Detach()
      

  2.   

    改用传IID吧!
    在函数内部在QueryInerface
      

  3.   

    关键是我定义 时就出错, 因为在IDL 中总得有个先后,而前面的又不能用到后面的
    接口 定义,但同时后面的也需要用前面的接口定义
    就像文件互包含一样,
    不知道怎么解决?
      

  4.   

    是否可以象类的声明一样,先声明一次
    interface A2;interface A1{}interface A2{}
      

  5.   

    同意newkey007(无限天空) 和top_hipster(top_hipster) 所说!
      

  6.   


    部分同意newkey007(无限天空) 和top_hipster(top_hipster) 所说的实现办法!另可见《COM本质论>>.//////////////////////
    改用传IID吧!
    在函数内部在QueryInerface
    也是一种方法。
    /////////////////////////
    还有一个办法就是类似于C++中的void*的做法,互相传IUNKOWN来变通一下。/////////////////////////
    COM的初学者,随便说说。不过我觉得,人们要用COM的理由就是去掉过多的耦合,尤其是去循环依赖(COM设计者就是依据这个想法来构造COM的)。你这样写也许可以有各种方法实现,但在设计方案的时候已经先输掉了一大块。——因为你这个恰恰就是一个循环依赖。我认为最好的办法是改进你的设计先。