大家知道win32中iunknown定义如下:
interface iuknown
{
virtual hresult _stdcall queryinterface(const iid& iid,void** ppv) =0;
virtual ulong _stdcall addref() = 0;
virtual ulong _stdcall release = 0;
};
可是在“com技术内幕”p31页中明确指出:
iunknown并不是虚拟基类,不能被虚拟继承,否则会导致与com不兼容的vtbl.如果一个组件从两个接口继承,如果Iunknown不用虚拟继承的话,那么会产生两个Iunknown了,这不是违背了一个组件一个Iunknown吗?
interface iuknown
{
virtual hresult _stdcall queryinterface(const iid& iid,void** ppv) =0;
virtual ulong _stdcall addref() = 0;
virtual ulong _stdcall release = 0;
};
可是在“com技术内幕”p31页中明确指出:
iunknown并不是虚拟基类,不能被虚拟继承,否则会导致与com不兼容的vtbl.如果一个组件从两个接口继承,如果Iunknown不用虚拟继承的话,那么会产生两个Iunknown了,这不是违背了一个组件一个Iunknown吗?
解决方案 »
- 关于CreateFile中FILE_SHARE_WRITE的问题
- 请问下程序为什么每次都记住了我上次关闭时的状态?
- 工具栏问题
- 模拟网页服务器,如果能让浏览器下载一部分数据就显示一部份。。。
- 关于sta
- 吼~~~~~~~~~~~;为什么我的UDP端口绑定5000以上的端口,不能select到数据;【有代码】
- 如何实现程序退出再自动启动?
- 请问专家:
- 为什么在我的机器上安装98DCOM的时候老是出错???我该怎么办???
- 哪有下载ATL编写ActiveX控件源代码的站点,各位高手请帮帮忙!!!
- A duplicate insert block exists for class "COneValuDlg" in the source files
- SQLSERVER 内存不断增大问题(在线等,急!)
然后就是 被虚拟继承,否则会导致与com不兼容的vtbl 这句话讲的不兼容的Vtbl,是怎么回事呢?
虚基类主要解决在多重继承时,基类可能被多次继承,虚基类主要提供一个基类给派生类,如:
class B
{
};
class D1 : public B
{
};
class D2 : public B
{
};
class C: public D1, public D2
{
};
这里C在D1,D2上继承,但有两个基类,造成混乱。因而使用虚基类,即:
class B
{
};
class D1 : virtual public B
{
};
class D2 : virtual public B
{
};
class C: public D1, public D2
{
};这样就可以回答后面的问题了,假如IX和IY按需你方式继承IUnknown,那么IX和IY的vtbl的头三个函数指向的就不是......了。
不知道说清楚了没有,我也是刚刚开始学习COM