我在同一个COM中,调用另外一个接口
比如有接口 IA,IB
IB实现类中的一个函数实现
xxx(IA *pA)   //能这样用吗
{
   //IA指针进来以后需不需要转成实现类的形式,如CA类
   pA->functionA();//这样编译不会出错,运行会出错吗
   pA->propertyA=10;//这样编译出错,说是propertyA不是IA的成员,其实是
                    //是不是一定要把属性也写成函数的形式才能调用
}

解决方案 »

  1.   

    在vc中属性必须向函数一样调用,
    xxx(IA *pA)   //能这样用吗  -- 可以
    {
       //IA指针进来以后需不需要转成实现类的形式,如CA类  --是的,因为你到用的是实现类的成员函数eg:
       CComObject<CA> *AObj = NULL;
       AObj = static_cast<CA*>pA;
       pA->functionA();//这样编译不会出错,运行会出错吗   ---肯定出错改成:AObj->functionA();
       pA->propertyA=10;//这样编译出错,说是propertyA不是IA的成员,其实是
                        //是不是一定要把属性也写成函数的形式才能调用  --出错
    //改成pA->propertyA(10);
    }
      

  2.   

    xxx(IA *pA)   //能这样用吗--能不能这么用要看你下面想干什么
    {
       //IA指针进来以后需不需要转成实现类的形式,如CA类--不该转,如果你知道传进来的是CA类,你还用接口指针做参数干什么
       pA->functionA();//这样编译不会出错,运行会出错吗--会不会出错要看接口怎么实现(implement)
       pA->propertyA=10;//这样编译出错,说是propertyA不是IA的成员,其实是
                        //是不是一定要把属性也写成函数的形式才能调用-----给接口加个property吧,会自动生成两个函数,一个get,一个set,在vc中必须显式调用这些函数,在vb或asp中就可以想field一样操作了
    }