组件有两个接口:
背景:
IDev,IMailInfo,其中IDev必须实现(即生成一个接口类),IMailInfo定义的一些回调函数,不用实现,由客户端来实现。
IDev接口的某些函数要用到IMailInfo作为参数,如:HRESULT Mail([in] IMailInfo* pMail];
处理:
在客户端从IMailInfo派生出一个类IMailInfoImp,该派生类实现了IMailInfo接口所定义的虚函数
调用:
成一个IMailInfoImp的实例 ,如:obj吧,
调用方法Mail(&obj)后,如出unknown error OxC0000005的错误,为什么呢?
背景:
IDev,IMailInfo,其中IDev必须实现(即生成一个接口类),IMailInfo定义的一些回调函数,不用实现,由客户端来实现。
IDev接口的某些函数要用到IMailInfo作为参数,如:HRESULT Mail([in] IMailInfo* pMail];
处理:
在客户端从IMailInfo派生出一个类IMailInfoImp,该派生类实现了IMailInfo接口所定义的虚函数
调用:
成一个IMailInfoImp的实例 ,如:obj吧,
调用方法Mail(&obj)后,如出unknown error OxC0000005的错误,为什么呢?
Mail这个函数所属的对象是个空指针.
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这个函数所属的对象是个空指针”是不成立,在此谢谢以上朋友的回复,盼能帮我解决这个难题!
如果pPtr返回正确,你应该看Mail内部的调用了,调试进去吧
或者,在实现IMailInfo接口时,对于每个接口方法都要前缀raw_可以参考http://www.vckbase.com/document/viewdoc/?id=1526