2011-11-11 vtable COM C++ COMのバイナリ構造とC++の関係を確認するため、vtableのメモリレイアウトを調べました。 https://gist.github.com/1362138 仮想ではないメンバ関数はsizeofに影響しません。 仮想関数がない場合、インスタンスへのポインタからメンバ変数が入っています。 仮想関数がある場合、インスタンスへのポインタにはvtableへのポインタが入っていて、その次にメンバ変数が入っています。 継承するとvtableがあればポインタは差し替えられ、メンバ変数は後ろに追加されます。 仮想関数コールはvtableを読むラッパーを経由します。
2011-11-10 手動呼び出し COM C言語 COMのメモリレイアウトを理解するため、なるべく既存のマクロを使わないでC言語から呼び出してみました。 https://gist.github.com/1362172 手軽にCOMのサンプルを作る方法が見当たらなかったので、以下の Project1.dll を使わせていただきました。 C言語でCOMクライアント 〜 2. 今回のC言語クライアントの概要 〜 続きを読む