知識マップ: 32bitアプリから64bit DLLを呼ぶCOMブリッジ実例

記事「32bitアプリから64bit DLLを呼ぶCOMブリッジ実例」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

32bitアプリはビット構成が一致しないin-proc COMとして64bit DLLを直接ロードできないため、この記事では64bit側の処理をCOM LocalServer(EXEサーバー)として別プロセスに分離し、IDLとTypeLibで共有したCOMインターフェース越しに型付きで呼び出します。マーシャリングとProxy/Stubがプロセス境界をまたぐ呼び出しを橋渡しし、CLSIDとProgIDの登録、そしてCLSIDサブキーが32bit viewと64bit viewで別になるWOW64レジストリリダイレクターへの両面登録が前提になります。マシン全体への登録には管理者権限が必要で、.NET(5以降)は標準のEnableComHostingがin-proc専用のためOut-of-procサーバーの登録処理は自前で書く必要があります。

32bit/64bit COMブリッジの知識マップ32bitアプリが64bit DLLをCOM LocalServerのEXEサーバーとして呼び出す構成が、型ライブラリ・マーシャリング・CLSID/ProgIDの登録・WOW64レジストリリダイレクターとどう関係するかを示す図利用する前提とする利用する利用する前提とする軽減する前提とする前提とする前提とするに保存されるで構成できる前提とする前提とする用いるのは非推奨前提とする利用する用いるのは非推奨前提とする利用する32bit/64bit COMブリッジCOM LocalServer(別プロセスCOMサーバー)型ライブラリ(TLB)マーシャリングProxy/StubIn-proc COM(DLLサーバー)bitness一致要件CLSID(Class ID)ProgID(Programmatic Identifier)WOW64レジストリリダイレクターWOW6432Nodereg.exe(/reg:32 /reg:64)クラスファクトリの登録管理者権限Regasm.exe.NET(Core以降).NET Framework.NET(5以降)のEnableComHosting/.comhost.dllCOM(コンポーネントオブジェクトモデル)

概念間の関係(全19件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

32bit/64bit COMブリッジ
32bitプロセスから直接読み込めない64bit DLLの処理を、64bitのCOM LocalServerへ分離しCOM経由で呼び出す構成。
COM LocalServer(別プロセスCOMサーバー)
COMサーバーをEXEとして別プロセスで動かす形態。bitnessの壁を越えたり、クラッシュを隔離したりできる。レジストリのCLSID配下のLocalServer32キーにEXEパスを登録する。
マーシャリング
プロセス境界だけでなく、同一プロセス内のCOMアパートメント境界やマネージド/ネイティブ境界のような呼び出し境界を越えて、引数や戻り値をやり取りできる形に詰め直すこと。
In-proc COM(DLLサーバー)
COMコンポーネントを呼び出し側と同じプロセスに読み込んで使う形態。
ProgID(Programmatic Identifier)
CLSIDに付けた、人が読める文字列の名前。`Excel.Application`のような形でCLSIDに対応付けられる。
CLSID(Class ID)
COMコンポーネントの実装(クラス)を一意に指すGUID。レジストリ上の登録の鍵になる識別子。
WOW64レジストリリダイレクター
64bit Windows上で32bitアプリと64bitアプリに別々のレジストリviewを見せる仕組み。HKLM\SOFTWARE\Classes直下は共有される一方、CLSIDサブキー配下は32bit側と64bit側で別になる。
Regasm.exe
.NET FrameworkのアセンブリをCOMへ登録するための登録ツール。
.NET(5以降)のEnableComHosting/.comhost.dll
.NET 5以降でCOM公開を行うための仕組み。ビルド時に.comhost.dllを生成しregsvr32で登録する(既定でin-procのみ)。
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
COM(コンポーネントオブジェクトモデル)
公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。