Delphi 2010以降ではIInterfaceからasで任意のクラスにキャストすることが可能になりましたが、それ以前のバージョンでIInterfaceからTObjectにキャストを行う方法についてのBarry KellyさんとHallvard Vassbotnさんによる記事。興味深い。とりあえずメモ。
Entropy Overload: An ugly alternative to interface to object casting
Hallvard's Blog: Hack #7: Interface to Object [in The Delphi Magazine]
どちらの記事のコードも基本的には同じで、IInterfaceからvtable(仮想メソッドテーブル)を参照し、最初のエントリにあるスタブメソッドのコードの中にあるオフセットを取得してIInterface(これは実際にはポインタ)に加算することでインスタンスのアドレスを取得する、というハックになっています。
2011年3月8日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿