我有以下COM接口层次结构和一个实现它们的类:
interface IX : public IUnknown{};
interface IY : public IUnknown{};
class CA: public IX, public IY{};
Run Code Online (Sandbox Code Playgroud)
这里class CA有效地继承了IUnknown两次.
我们知道有两个vtable指针class CA- 一个指向IX,另一个指向IY.因此IUnknown存储在IX子对象中与IUnknown存储在IY子对象中不同.
然而,当我们调用IX::QueryInterface()或IY::QueryInterface()在相同的对象和查询时,IUnknown我们得到相同的IUnknown*指针.
为什么会这样?
很长一段时间我对这个问题感到困惑:
.NET EXE和DLL文件都有地址空间.我知道他们都有代码空间和全局变量空间.但我想知道DLL是否有自己的堆和堆栈空间.