ATL为了实现这个东西,一定要理解com中的虚函数表在内存中的分布情况。
这个我也是看了老外写的文章和几本书上掰的,不过觉得还是比较牛的
多继承,有个virtue table ,第一个继承的基类,将放在第一的位置上面,也就是和this的位置一样,
在这个virtue table中,基类的方法放在前面,派生类的方法放在后面。其他顺序和定义的时候一样
在基类的构造和派生类的构造中,虚函数表有个重构的过程,虚函数表的地址在构造中有变化。
如果virtue 的函数是纯虚的,它的地址就是0000,在继承中如果一天不实现,一天就不会发生变化。
ATL中的表驱动就直接利用了这些特点,直接利用虚函数表的特点,直接通过指针来直接定位函数。