kyb*_*lgd 3 c++ com object-layout
我试图了解COM如何指定其对象的布局,以便想要使用COM对象的客户端知道如何做到这一点.
我已经读过实现多个接口的COM对象可以用不同的方式来实现它,包括使用嵌套类或多重继承.
我的理解是两种技术都必须产生相同的内存布局(符合COM规范),以便想要使用COM对象的客户端(例如在C中)知道如何做.
所以我的具体问题是:使用多重继承与嵌套类实现的c ++对象的内存布局是否存在差异.
有人能指出我指定COM对象布局的位置吗?
COM完全不知道对象的内存布局.它想要和需要的只是一个函数指针表,当它调用时IUnknown::QueryInterface().你如何实现它完全取决于你.MFC使用嵌套类,几乎任何其他东西都利用C++编译器中对多重继承的内置支持.MSVC++编译器实现它的方式与COM所需的完全兼容.这不是偶然的.使用您在书中列出的有关COM的样板代码,该代码显示了如何正确实现IUnknown.
COM中指定的唯一"布局"是与每个接口关联的vtable(虚函数指针表).每个接口都派生自IUnknown,因此无论客户端具有指针的对象的任何接口,他都可以调用QueryInterface来获取同一对象上的不同接口.
对象没有强制布局.实际上,COM中对象的整体思想与OO语言中的类实例非常不同:了解同一COM对象是否暴露两个接口的唯一方法是在两个接口上调用IUnknown接口的QueryInterface - 当且仅当它们返回相同的接口指针时,它们才是同一对象的接口.
这是一个非常灵活的想法: