GObjectは、いくつかの規則を使用してプレーン C でオブジェクトを実装します。静的メソッドは、インスタンス構造体を最初の引数として取る単なる関数です。仮想メソッドは、クラス構造体 (vtable の一種) の関数ポインターとして実装されます。親クラスの構造体を子クラスの構造体などに配置することで、継承を行うことができます。
COM は、Windows で使用される別のオブジェクト システムであり、 C++ のメモリ レイアウト(少なくとも MSVC コンパイラ)と一致するように設計されています。オブジェクトには、インターフェイス ポインターを取得できる vtable があり、オブジェクトのメソッドを呼び出すことができます。使用される呼び出し規則は、上記のものと非常によく似ています (同一ですか?)。最初の引数としてインスタンス ポインターを渡します。
さて、COM でも有効な GObject クラス/オブジェクトを作成することは可能でしょうか? インスタンス構造体の先頭にクラス構造体へのポインタを置き、グルーコードを書くなどで考えています。次に、GObject サブクラスへのポインターを QueryInterface して、その上で仮想メソッドを呼び出すことができますか?
うまくいくとしたら、その方法を概説していただけますか?
うまくいかない場合、それを不可能にしているオブジェクトシステムの違いは何ですか?