初学ATL编程,请教两个问题。

xhncmec 2004-08-07 09:19:36
以下是接口IWzd的实现类,本人认为有了ATL_NO_VTABLE就等于该实现类没有了VTABLE表,ATL中,COM对象最终通过
CComObject<CWzd>* pObj = new CComObjct<CWzd>;创建的,我问题是

一、CWzd类实现了IWzd接口,但是,CWzd没有虚函数表,pObj能访问CWzd成员函数Method1吗?搞不懂!

二、CWzd类是派生类(由三个模板类派生,见以下例子),怎么会用派生类来实例化父类CComObject?思维比较混乱,请高手帮忙!


class ATL_NO_VTABLE CWzd :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CWzd, &CLSID_Wzd>,
public IDispatchImpl<IWzd, &IID_IWzd, &LIBID_SERVERLib>
{
public:
...
// IWzd接口
public:
STDMETHOD(Method1)(/*[in]*/long lArg);
}

...全文
109 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangweixing2000 2004-08-09
  • 打赏
  • 举报
回复
1,有虚表只是你没有看到!可以直接通过类对象调用任何方法!
2,最好看看深入解析atl
Cline 2004-08-07
  • 打赏
  • 举报
回复
1.因为所有的调用都发生在基类(接口)上,即使不对派生类的VTABLE进行正确赋值也没关系.
2.是有些绕.A派生于B,B又派生于A.不过你只要分开理解就行了,反正编译能做对就行!

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧