1

GObject通过使用一些约定在纯 C 中实现对象:静态方法只是将实例结构作为第一个参数的函数。虚拟方法被实现为类结构(一种 vtable)中的函数指针。您可以通过将父类 struct 放置在子类 struct 中来进行继承,依此类推。

COM 是一个不同的对象系统,在 Windows 中使用,旨在与 C++ 的内存布局相一致(至少与 MSVC 编译器一致)。对象有一个vtable,你可以得到一个接口指针,然后你可以调用对象的方法。使用的调用约定与上述约定非常相似(相同?),您将实例指针作为第一个参数传递。

现在,我想知道,是否可以创建一个在 COM 中也有效的 GObject 类/对象?我正在考虑例如在实例结构的开头放置一个指向类结构的指针,并编写一些胶水代码。然后我是否能够 QueryInterface 指向我的 GObject 子类的指针并在其上调用虚拟方法?

如果它会起作用,你能概述一下如何吗?

如果它不起作用,那么对象系统有什么区别使它不可能?

4

0 回答 0