In-Process コンポーネント技術の限界
『漏れのある抽象化の法則』の世界の話.
ローカルにはうまく行っているように見えて,全体としてはまるでうまく行かないことがあります.
例えば,以下の問いはいずれも局所的には Yes が正解です.
- Visual Studio は,Internet Explorer をホストできる (ブラウザを内部に表示することができる)
- Visual Studio は,対応するバージョンの CLR をホストしている
- Internet Explorer は,CLR をホストできる
- Internet Explorer は ActiveX Plug-in をホストできる
- WPF は内部的に Direct3D 9 を活用する
一方で,いくつかのコンポーネント技術には技術上の制約があります.例えば次のような.
- 同一の Win32 プロセス内で,バージョンの異なる Direct3D を同時に使用することは想定されていない
- 同一の Win32 プロセス内で,バージョンの異なる CLR を同時にホストすることはできない
さて,ルール説明は以上で終了です.
それでは次の絵から間違いを見つけてください.
この辺の『漏れ』の問題,結構やばいところまで来ている思ってるんですけどね..NET Framework 1.0 が Windows Vista で正式サポートされないどころじゃないというか.
例えば,Flash のようなコンポーネントが Direct3D 7 を使っていたとして,Internet Explorer でそういうページをぽんと開くと.んで,今度は次に別のタブで XAML を読み込もうとするとクラッシュ,なんてことが起きても不思議じゃない状況です.
他にも,Visual Studio 2005 用のアドインである "Cider" は,Visual Studio 2005 上で WPF の WYSIWYG 開発を実現してくれますが,これ,XAML 開いた瞬間に,d3d9.dll 等の DLL を devenv.exe のプロセス内にロードしているわけです.もし仮に,Visual Studio のアドインで Direct3D 7 を使ったものがあったりしたらどうなるでしょう? と.