知識マップ: 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サーバーの登録処理は自前で書く必要があります。
flowchart LR
accTitle: 32bit/64bit COMブリッジの知識マップ
accDescr: 32bitアプリが64bit DLLをCOM LocalServerのEXEサーバーとして呼び出す構成が、型ライブラリ・マーシャリング・CLSID/ProgIDの登録・WOW64レジストリリダイレクターとどう関係するかを示す図
com_bridge_32_64["32bit/64bit COMブリッジ"]
com_localserver["COM LocalServer(別プロセスCOMサーバー)"]
type_library["型ライブラリ(TLB)"]
com_marshaling["マーシャリング"]
proxy_stub["Proxy/Stub"]
in_proc_com["In-proc COM(DLLサーバー)"]
bitness_match_requirement["bitness一致要件"]
clsid["CLSID(Class ID)"]
progid["ProgID(Programmatic Identifier)"]
wow64_registry_redirector["WOW64レジストリリダイレクター"]
wow6432node["WOW6432Node"]
reg_exe["reg.exe(/reg:32 /reg:64)"]
class_factory_registration["クラスファクトリの登録"]
admin_rights["管理者権限"]
regasm["Regasm.exe"]
dotnet[".NET(Core以降)"]
dotnet_framework[".NET Framework"]
dotnet_comhost[".NET(5以降)のEnableComHosting/.comhost.dll"]
com["COM(コンポーネントオブジェクトモデル)"]
com_bridge_32_64 -->|"利用する"| com_localserver
com_bridge_32_64 -->|"前提とする"| type_library
com_localserver -->|"利用する"| com_marshaling
com_marshaling -->|"利用する"| proxy_stub
in_proc_com -->|"前提とする"| bitness_match_requirement
com_localserver -->|"軽減する"| bitness_match_requirement
com_localserver -->|"前提とする"| clsid
progid -->|"前提とする"| clsid
com_localserver -.->|"前提とする"| wow64_registry_redirector
clsid -.->|"に保存される"| wow6432node
wow64_registry_redirector -->|"で構成できる"| reg_exe
com_localserver -->|"前提とする"| class_factory_registration
com_bridge_32_64 -.->|"前提とする"| admin_rights
regasm -->|"用いるのは非推奨"| dotnet
regasm -->|"前提とする"| dotnet_framework
dotnet_comhost -->|"利用する"| dotnet
dotnet_comhost -->|"用いるのは非推奨"| com_bridge_32_64
dotnet -.->|"前提とする"| clsid
com -.->|"利用する"| type_library
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 32bit/64bit COMブリッジはCOM LocalServer(別プロセスCOMサーバー)を利用します。
- 32bit/64bit COMブリッジは型ライブラリ(TLB)を前提とします。
- COM LocalServer(別プロセスCOMサーバー)はマーシャリングを利用します。
- マーシャリングはProxy/Stubを利用します。
- In-proc COM(DLLサーバー)はbitness一致要件を前提とします。
- COM LocalServer(別プロセスCOMサーバー)はbitness一致要件を軽減します。
- COM LocalServer(別プロセスCOMサーバー)はCLSID(Class ID)を前提とします。
- ProgID(Programmatic Identifier)はCLSID(Class ID)を前提とします。
- COM LocalServer(別プロセスCOMサーバー)はWOW64レジストリリダイレクターを前提とします。
- CLSID(Class ID)はWOW6432Nodeに保存されます。
- WOW64レジストリリダイレクターはreg.exe(/reg:32 /reg:64)で構成できます。
- COM LocalServer(別プロセスCOMサーバー)はクラスファクトリの登録を前提とします。
- 32bit/64bit COMブリッジは管理者権限を前提とします。
- Regasm.exeを.NET(Core以降)に用いることは推奨されません。
- Regasm.exeは.NET Frameworkを前提とします。
- .NET(5以降)のEnableComHosting/.comhost.dllは.NET(Core以降)を利用します。
- .NET(5以降)のEnableComHosting/.comhost.dllを32bit/64bit COMブリッジに用いることは推奨されません。
- .NET(Core以降)はCLSID(Class ID)を前提とします。
- COM(コンポーネントオブジェクトモデル)は型ライブラリ(TLB)を利用します。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。