组件有两个接口:
背景:
IDev,IMailInfo,其中IDev必须实现(即生成一个接口类),IMailInfo定义的一些回调函数,不用实现,由客户端来实现。
IDev接口的某些函数要用到IMailInfo作为参数,如:HRESULT Mail([in] IMailInfo* pMail];
处理:
在客户端从IMailInfo派生出一个类IMailInfoImp,该派生类实现了IMailInfo接口所定义的虚函数
调用:
成一个IMailInfoImp的实例 ,如:obj吧,
调用方法Mail(&obj)后,如出unknown error OxC0000005的错误,为什么呢?

解决方案 »

  1.   

    obj没有初始化
    Mail这个函数所属的对象是个空指针.
      

  2.   

    再次说明:
    1、这是个进程外组件
    2,组件的内部逻辑结构如上所述
    3,为了测试这个组件,写了个测试程序(即客户端)
       加载组件方式如下:
       import "xxxx.tlb",生成了XXXX.tlh和xxxx.thi文件
       根据要求,要实现IMailInfo的虚函数,于是从它派生出IMailInfoImp类实现其所有虚函数,(注:IMailInfo在xxxx.tlh里有定义)
       
       另外:IDev通过智能指针来使用:IIDevPtr pPtr;
       因此调用mail回调函数来返回相关数据,pPtr->Mail(&obj);   声明一点pPtr是有地址,调用其它函数正常,如:pPtr->init(....);所以“哈儿”所说的“Mail这个函数所属的对象是个空指针”是不成立,在此谢谢以上朋友的回复,盼能帮我解决这个难题!
      

  3.   

    IMailInfo实例化有问题!指针指错了
      

  4.   

    IIDevPtr pPtr;智能指针也是需要CreateInstance的.pPtr.CreateInstance();
    如果pPtr返回正确,你应该看Mail内部的调用了,调试进去吧
      

  5.   

    在你com的exe中指定外部调试调用Mail的exe调试
      

  6.   

    import "xxxx.tlb" raw_interfaces_only
    或者,在实现IMailInfo接口时,对于每个接口方法都要前缀raw_可以参考http://www.vckbase.com/document/viewdoc/?id=1526
      

  7.   

    参数传错了。我调用接口的时候也出过这个错,同样的返回值。最后检查是传入参数BSTR类型时没有申请内存,直接将A2OLE()传给了参数BSTR,结果就是一样,接口方法里面打的MessageBox也没有弹出来,也返回0xc0000005