VB6で使用されるすべてのオブジェクトはCOMオブジェクトです。 COMオブジェクトは本質的に可変長データ構造であり、その可変長ヘッダにはVTableへの32ビットポインタの数が任意に含まれ、連続するバイトにはオブジェクトのインスタンスデータが含まれます。
Bytes
0-3 VTable1 pointer
4-7 VTable2 pointer
8-11 VTable3 pointer
...
Instance data
VTableは、すべて "this"インスタンスポインタが渡される関数に対する32ビットポインタの配列です。
Bytes
0-3 Func1(this, ..., ...)
4-7 Func2(this, ..., ...)
8-11 Func3(this, ..., ...)
...
唯一の他の仕様は、そのすべてのvtable MUST継承のIUnknownから、すなわち最初の3つの関数がある必要があります
QueryInterface()
AddRef()
Release()
基本的に、QueryInterfaceが()を使用すると、COMオブジェクトが(UUIDによって表される)特定のインターフェイスをサポートしているかどうかを確認することができます。 AddRef()は、オブジェクトライターが内部参照カウントをインクリメントできるようにします。 Release()を使用すると、オブジェクトライターは参照カウンタを減らし、カウントがゼロのときにオブジェクトを破棄できます。 VBでこれらのメソッドを呼び出すことは決してありません - コンパイラはこれらの呼び出しをあなたに追加します(VB6の利点の1つ)。
詳細はhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms680509(v=vs.85).aspxを参照してください。
VBオブジェクトタイプは、IDispatchインターフェイスをサポートするオブジェクト(http://msdn.microsoft.com/en-us/library/windows/desktop/dd318520(v=vs.85).aspxを参照)への参照です。これは、VBおよびVBScriptでレイトバインディングを実行できるようにするものです。 VB6で記述されたすべてのオブジェクトは、IDispatchから継承するインターフェイスを自動的に実装します。これは、初期および後期バインドをサポートするため、デュアルインターフェイスと呼ばれます。
COMに直接型システムが組み込まれていないことに注意してください。ただし、オブジェクトのユーザーがオブジェクトについて追加する情報にアクセスできるようにするITypeInfoインターフェイスをサポートすることができます(この情報を格納するために型ライブラリを使用する既定の実装を使用する方が簡単です)。
Variant型は、実際にはどのオートメーション型がカプセル化されているかを示す2バイト整数(vt)を持つ16バイト構造体で、後者の8バイトは値型を格納するために使用できます最大8バイトのポインタ、または別のタイプへの32ビットポインタ。 VBは、内部関数とすべての必要なメモリ割り当てと割り当て解除を使用して、VB型とVariant間のすべての必要な変換を行います。バリアントには、オブジェクトへのポインタをVariantにコピーし、オブジェクトのAddRef()メソッドを呼び出すことによって、COMオブジェクトへの参照を含めることができます。
VB6バリアントには、http://msdn.microsoft.com/en-us/library/aa908601.aspxで説明されている構造が含まれています。 – Bob77