ClassB中 可以存ClassA* pAs[];这样不就可以直接访问了么。

解决方案 »

  1.   

    InterfaceA指针得到IUnKnown接口指针,再强转ClassA指针,不然的话,可能还是得从InterfaceA中入手,添加新的方法 AF2了
      

  2.   

    直接在Interface中增加接口来调用类的方法,比较规范
      

  3.   


    这是一个思路,ClassA* pAs[] 可以是 InterfaceA* pAs[]的副本,需要考虑二者的增删安全性,会比较麻烦
      

  4.   

    1、ClassA* pClassA = dynamic_cast<ClassA*>(pAs[i]);
    2、CComObject<ClassA>* pClassA = dynamic_cast<CComObject<ClassA>>(pAs[i]);如何用呢,1 还是 2?
    貌似 1 是不行的
      

  5.   


    嗯,问题是客户端不需要知道方法 AF2。
    有的说可以使用 hidden 属性修饰 AF2,但 hidden 貌似不是为了这种目的设计的
      

  6.   

    只是屌丝,但喜欢顶这样的帖子……
    在你的工程内部不能调用 classA公共方法AF2,可能是由于AF2是虚函数造成的
    定义一个不在接口里面的方法AF2应该是不合理的设计,应该避免这样做不过你可以这样:继承类ClassA不过你要重写ATL的CreateInsatance(大概名称)方法 返回自己继承的类,然后在工程内部ClassB就可以像c++一样调用ClassA的子类方法AF2
      

  7.   

    另外想问:
    你的collection对象是怎么创建的,就是说ClassB是怎么有InterfaceACollection指针的?collection接口是怎么获取的?怎么感觉逻辑有点混乱,因为只有你的collection才应该知道存的ClassA指针而不是是InterfaceA指针。其它对象是不知道的
      

  8.   


    collection对象是在FinalConstruct里创建的,collection有count,item,[]公共属性接口,[]返回的就是ClassA指针。打个比分,人(classB)出生时就有牙槽 (interfaceAcollection),但是没有牙(classA),张出牙后人可以看到自己有多少颗牙,每颗牙长什么样,这一点都不混乱。
      

  9.   

    你好,acaicb:想必一年前的这个问题你已经解决了吧,能告知是怎么解决的么?我最近也遇到了同样的问题,希望能得的你的不吝赐教。。