如果我加另外一个函数
fun2(int a)
则在CB.cpp以及CB.h里能看到开发环境生成的这个函数定义

解决方案 »

  1.   

    1.创建一个新项目,new 一个simple object, Name为A,给IA接口add一个方法fun() 
    2.再这项目里再new一个simple object Name为B,给IB接口add一个方法CallA_fun([in] IA* pIA)现在的疑问是:
    在第一步时,在CA.cpp里面,wizard能帮你生成 STDMETHODIMP CA::fun(){return S_OK }
    而第二步完后而做完第二步时,wizard确没有帮我在CB.cpp里add我想要代码 STDMETHODIMP CA::fun(IA *pIA){return S_OK;} 请问为什么
      

  2.   

    你的IB应该是一个dual接口,继承自idispatch接口.如果你把ib改为custom接口,直接继承自iunknown,就不会出现这个问题.
    由于idispatch方法中只支持automation数据类型.所以用用户自定义的数据类型或者一些特殊的c++的数据类型酒会出现这种问题.
    解决的方法:
     1.把IB改为继承自iunknown
     2.CallA_fun([in] Idisptach* pIA) 
     3.CallA_fun([in] variant pIA) 然后取pIa.pdispatch的值
     4,如果你非要用idispatch实现CallA_fun([in] IA* pIA)的话,可以加一个接口ic(继承自iunknown),然后加入CallA_fun([in] IA* pIA),在ib中实现Ic接口.
      以上几种方法因该是可行的.但是没有具体试过.写的很匆忙,如果有说的不对的地方,请给位高手指出.:)
      

  3.   

    你是直接在 idl 中写的吗,如果用向导生成的,没有道理没有啊,即使向导没帮你写,你就自己写了吧,没有难度的。
    有个偷懒的办法值得一试,我经常这样偷懒,把 
    CYouClass : 
      ......
      pulic IB  //!!!!!
    {
         BEGIN_COM_MAP(CESHEWord2Html)
          ......
             COM_INTERFACE_ENTRY(IB) //!!!!!!
          ......
         END_COM_MAP()
    };
    把作上标记的两行删除掉,然后选 Implement Interface 选上 IB ,呵呵,就行了。
      

  4.   

    抄错地方了, CESHEWord2Html --> CYouClass
      

  5.   

    to LLnju:
    是的,向导并没有帮我生成那段代码,后来我自在h和cpp中加的那段定义
    但你有没觉得 tonkeycn说的有道理,我觉得有^_^,欢迎继续讨论