GObject通过使用一些约定来实现普通C中的对象:静态方法只是将实例struct作为第一个参数的函数。虚方法在类结构(一种vtable)中实现为函数指针。您可以通过放置parent class struct in the child class struct等来继承。
COM是一个不同的对象系统,在Windows中使用,designed to coincide with C++'s memory layout(至少与MSVC编译器一起使用)。对象有一个vtable,你可以获得一个接口指针,然后你可以调用该对象的方法。使用的调用约定与上面描述的约定非常相似(相同?),您将实例指针作为第一个参数传递。
现在,我想知道,是否有可能制作一个在COM中也有效的GObject类/对象?我在想在实例结构的开头放置一个指向类结构的指针,并编写一些粘合代码。那么我是否可以使用QueryInterface指向我的GObject子类并在其上调用虚方法?
如果它可行,你能概述一下吗?
如果它不起作用,对象系统的差异是什么让它变得不可能?