@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/01/25/002-com-case-study-32bit-to-64bit/#article>
    schema:about <https://comcomponent.com/knowledge/com-bridge-32-64/>, <https://comcomponent.com/knowledge/com-localserver/> ;
    schema:mentions <https://comcomponent.com/knowledge/com/>, <https://comcomponent.com/knowledge/in-proc-com/>, <https://comcomponent.com/knowledge/type-library/>, <https://comcomponent.com/knowledge/com-marshaling/>, <https://comcomponent.com/knowledge/proxy-stub/>, <https://comcomponent.com/knowledge/clsid/>, <https://comcomponent.com/knowledge/progid/>, <https://comcomponent.com/knowledge/wow64-registry-redirector/>, <https://comcomponent.com/knowledge/wow6432node/>, <https://comcomponent.com/knowledge/reg-exe/>, <https://comcomponent.com/knowledge/class-factory-registration/>, <https://comcomponent.com/knowledge/regasm/>, <https://comcomponent.com/knowledge/dotnet-comhost/>, <https://comcomponent.com/knowledge/bitness-match-requirement/>, <https://comcomponent.com/knowledge/dotnet-framework/>, <https://comcomponent.com/knowledge/dotnet/>, <https://comcomponent.com/knowledge/admin-rights/> .

<https://comcomponent.com/knowledge/com-bridge-32-64/> a skos:Concept ;
    skos:prefLabel "32bit/64bit COMブリッジ"@ja ;
    skos:definition "32bitプロセスから直接読み込めない64bit DLLの処理を、64bitのCOM LocalServerへ分離しCOM経由で呼び出す構成。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/com-localserver/> ;
    ks:requires <https://comcomponent.com/knowledge/type-library/> .

<https://comcomponent.com/knowledge/com-localserver/> a skos:Concept ;
    skos:prefLabel "COM LocalServer(別プロセスCOMサーバー)"@ja ;
    skos:definition "COMサーバーをEXEとして別プロセスで動かす形態。bitnessの壁を越えたり、クラッシュを隔離したりできる。レジストリのCLSID配下のLocalServer32キーにEXEパスを登録する。"@ja ;
    skos:altLabel "LocalServer32" ;
    skos:altLabel "out-of-proc COMサーバー"@ja ;
    skos:broader <https://comcomponent.com/knowledge/com/> ;
    ks:uses <https://comcomponent.com/knowledge/com-marshaling/> ;
    ks:mitigates <https://comcomponent.com/knowledge/bitness-match-requirement/> ;
    ks:requires <https://comcomponent.com/knowledge/clsid/> ;
    ks:requires <https://comcomponent.com/knowledge/class-factory-registration/> .

<https://comcomponent.com/knowledge/type-library/> a skos:Concept ;
    skos:prefLabel "型ライブラリ(TLB)"@ja ;
    skos:definition "インターフェース、メソッド、引数の型といった型情報をバイナリで持つファイル。VB6や.NETから型付きでCOMを呼び出す際の情報源になる。"@ja ;
    skos:altLabel "Type Library" ;
    skos:altLabel "TLB" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/com-marshaling/> a skos:Concept ;
    skos:prefLabel "マーシャリング"@ja ;
    skos:definition "プロセス境界だけでなく、同一プロセス内のCOMアパートメント境界やマネージド/ネイティブ境界のような呼び出し境界を越えて、引数や戻り値をやり取りできる形に詰め直すこと。"@ja ;
    skos:altLabel "marshaling" ;
    skos:altLabel "Marshaling" ;
    skos:altLabel "Marshalling" ;
    ks:uses <https://comcomponent.com/knowledge/proxy-stub/> .

<https://comcomponent.com/knowledge/proxy-stub/> a skos:Concept ;
    skos:prefLabel "Proxy/Stub"@ja ;
    skos:definition "マーシャリングを担当する一組の部品。呼び出す側に立つProxyと、呼ばれる側で受け取った呼び出しを本物のオブジェクトへ渡すStubからなる。"@ja .

<https://comcomponent.com/knowledge/in-proc-com/> a skos:Concept ;
    skos:prefLabel "In-proc COM(DLLサーバー)"@ja ;
    skos:definition "COMコンポーネントを呼び出し側と同じプロセスに読み込んで使う形態。"@ja ;
    skos:altLabel "DLLサーバー"@ja ;
    ks:requires <https://comcomponent.com/knowledge/bitness-match-requirement/> .

<https://comcomponent.com/knowledge/bitness-match-requirement/> a skos:Concept ;
    skos:prefLabel "bitness一致要件"@ja ;
    skos:definition "ネイティブモジュール(in-procのCOMコンポーネント、P/Invokeで呼ぶDLL、ベンダー提供SDKのDLLなど)を読み込むホストプロセスと、そのモジュールのビット構成(32bit/64bit)が一致していなければならないという制約。"@ja ;
    skos:altLabel "32bit/64bitの一致"@ja ;
    skos:altLabel "bitness match" .

<https://comcomponent.com/knowledge/clsid/> a skos:Concept ;
    skos:prefLabel "CLSID(Class ID)"@ja ;
    skos:definition "COMコンポーネントの実装(クラス)を一意に指すGUID。レジストリ上の登録の鍵になる識別子。"@ja ;
    skos:altLabel "Class ID" ;
    skos:broader <https://comcomponent.com/knowledge/com/> .

<https://comcomponent.com/knowledge/progid/> a skos:Concept ;
    skos:prefLabel "ProgID(Programmatic Identifier)"@ja ;
    skos:definition "CLSIDに付けた、人が読める文字列の名前。`Excel.Application`のような形でCLSIDに対応付けられる。"@ja ;
    skos:altLabel "Programmatic Identifier" ;
    skos:broader <https://comcomponent.com/knowledge/com/> ;
    ks:requires <https://comcomponent.com/knowledge/clsid/> .

<https://comcomponent.com/knowledge/wow64-registry-redirector/> a skos:Concept ;
    skos:prefLabel "WOW64レジストリリダイレクター"@ja ;
    skos:definition "64bit Windows上で32bitアプリと64bitアプリに別々のレジストリviewを見せる仕組み。HKLM\\SOFTWARE\\Classes直下は共有される一方、CLSIDサブキー配下は32bit側と64bit側で別になる。"@ja ;
    skos:altLabel "レジストリリダイレクタ"@ja ;
    ks:configuredBy <https://comcomponent.com/knowledge/reg-exe/> .

<https://comcomponent.com/knowledge/wow6432node/> a skos:Concept ;
    skos:prefLabel "WOW6432Node"@ja ;
    skos:definition "64bit Windows上で32bitアプリ向けのレジストリ内容が物理的に置かれる場所。"@ja .

<https://comcomponent.com/knowledge/reg-exe/> a skos:Concept ;
    skos:prefLabel "reg.exe(/reg:32 /reg:64)"@ja ;
    skos:definition "レジストリを操作するコマンドラインツール。/reg:32と/reg:64で32bit viewと64bit viewを明示的に指定して登録・照会できる。"@ja ;
    skos:altLabel "regコマンド"@ja .

<https://comcomponent.com/knowledge/class-factory-registration/> a skos:Concept ;
    skos:prefLabel "クラスファクトリの登録"@ja ;
    skos:definition "EXEサーバーが起動時に、自分がどのCLSIDの実装を提供するかをCOMランタイムへ登録する処理。"@ja ;
    skos:altLabel "CoRegisterClassObject" ;
    skos:altLabel "RegistrationServices.RegisterTypeForComClients" .

<https://comcomponent.com/knowledge/admin-rights/> a skos:Concept ;
    skos:prefLabel "管理者権限"@ja ;
    skos:definition "コンピューター全体の設定を変更できる権限。"@ja ;
    skos:altLabel "昇格"@ja .

<https://comcomponent.com/knowledge/regasm/> a skos:Concept ;
    skos:prefLabel "Regasm.exe"@ja ;
    skos:definition ".NET FrameworkのアセンブリをCOMへ登録するための登録ツール。"@ja ;
    skos:altLabel "RegAsm" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/dotnet/> ;
    ks:requires <https://comcomponent.com/knowledge/dotnet-framework/> .

<https://comcomponent.com/knowledge/dotnet/> a skos:Concept ;
    skos:prefLabel ".NET(Core以降)"@ja ;
    skos:definition ".NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。"@ja ;
    skos:altLabel ".NET Core" ;
    skos:altLabel "モダンな.NET"@ja .

<https://comcomponent.com/knowledge/dotnet-framework/> a skos:Concept ;
    skos:prefLabel ".NET Framework"@ja ;
    skos:definition "Windowsのコンポーネントとして扱われ、インストールされているOSのライフサイクルに沿ってサポートされるランタイム。System.Messagingの対象範囲。"@ja .

<https://comcomponent.com/knowledge/dotnet-comhost/> a skos:Concept ;
    skos:prefLabel ".NET(5以降)のEnableComHosting/.comhost.dll"@ja ;
    skos:definition ".NET 5以降でCOM公開を行うための仕組み。ビルド時に.comhost.dllを生成しregsvr32で登録する(既定でin-procのみ)。"@ja ;
    skos:altLabel "comhost.dll" ;
    skos:altLabel "EnableComHosting" ;
    ks:uses <https://comcomponent.com/knowledge/dotnet/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/com-bridge-32-64/> .

<https://comcomponent.com/knowledge/com/> a skos:Concept ;
    skos:prefLabel "COM(コンポーネントオブジェクトモデル)"@ja ;
    skos:definition "公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。"@ja ;
    skos:altLabel "Component Object Model" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-bridge-32-64/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com-localserver/> ;
    schema:description "32bit/64bit COMブリッジは、64bit側の処理をCOM LocalServer(EXEサーバー)として分離することで実現する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/localserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-bridge-32-64/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/type-library/> ;
    schema:description "32bitクライアントと64bitサーバーは、IDLとそれをバイナリ化した型ライブラリで定義された同じCOMインターフェースを共有することで、型付きの呼び出しを保つ。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/the-component-object-model> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com-marshaling/> ;
    schema:description "COM LocalServerはプロセス境界を越えるため、引数や戻り値をマーシャリングして送る。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/cominterop> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-marshaling/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/proxy-stub/> ;
    schema:description "マーシャリングは呼び出し側のProxyとサーバー側のStubが代行し、プロセス間通信で境界を越える。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/cominterop> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/in-proc-com/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/bitness-match-requirement/> ;
    schema:description "in-proc COM(DLLサーバー)は、読み込むホストプロセスとビット構成(32bit/64bit)が一致していなければならない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/32-bit-and-64-bit-interoperability> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/bitness-match-requirement/> ;
    schema:description "64bit側の処理を別プロセスのCOM LocalServerへ分離することで、32bitプロセスから64bit DLLをin-procでロードできないというbitness一致要件の制約を回避できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/32-bit-and-64-bit-interoperability> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/clsid/> ;
    schema:description "LocalServer方式では、レジストリのHKEY_CLASSES_ROOT\\CLSID\\{CLSID}\\LocalServer32キーの下にEXEのパスを登録する。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/localserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/progid/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/clsid/> ;
    schema:description "ProgIDは人間が読める別名にすぎず、実際にサーバーを特定するのはCLSIDの登録である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/-progid--key> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/wow64-registry-redirector/> ;
    schema:description "32bitクライアントと64bitクライアントの両方からサーバーを見つけられるようにする場合、CLSIDサブキー配下は32bit側と64bit側で別になる(WOW64レジストリリダイレクター)ため、LocalServer32への登録は32bit viewと64bit viewの両方に行う必要がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/clsid/> ;
    rdf:predicate ks:storedIn ;
    rdf:object <https://comcomponent.com/knowledge/wow6432node/> ;
    schema:description "32bit view(WOW64)向けに登録する場合、CLSID登録内容は物理的にはSOFTWARE\\Classesの下のWow6432Nodeに格納される(64bit view向けの登録はSOFTWARE\\Classes直下に格納される)。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/wow64-registry-redirector/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/reg-exe/> ;
    schema:description "regコマンドの/reg:32 /reg:64オプションで、32bit viewと64bit viewを明示的に指定して登録・照会できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-localserver/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/class-factory-registration/> ;
    schema:description "EXEサーバーは起動時にCoRegisterClassObjectなどで自分がそのCLSIDの担当だとCOMへ名乗り出る必要があり、レジストリ登録だけでは代替できない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/standard/native-interop/cominterop> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com-bridge-32-64/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/admin-rights/> ;
    schema:description "COMサーバーをHKEY_LOCAL_MACHINE配下にマシン全体へ登録する作業には管理者権限が必要である(HKCUへ登録する場合は不要)。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/localserver32> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/regasm/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/dotnet/> ;
    schema:description "RegAsm相当の登録ツールは.NET(Core/5以降)には存在しない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/regasm/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dotnet-framework/> ;
    schema:description "Regasm.exeによるアセンブリの登録やTlbExpによる型ライブラリ生成は.NET Frameworkで提供される。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-comhost/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet/> ;
    schema:description ".NET(5以降)のCOM公開はEnableComHostingを設定してビルドし、.comhost.dllを生成する仕組みである。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet-comhost/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/com-bridge-32-64/> ;
    schema:description ".comhost.dllは既定でin-proc用かつ64bitクライアント限定のため、この記事のようなOut-of-procのEXEサーバー構成にはそのまま使えず、登録処理を自前で書く必要がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dotnet/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/clsid/> ;
    schema:description "COMから生成される.NET(5以降)のクラスは、CLSIDの明示的な指定が必須である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/type-library/> ;
    schema:description "本記事のように型付きの呼び出しを型ライブラリで共有する場合、COMはインターフェースの型情報をIDLで定義し型ライブラリとしてバイナリ化することで、呼び出し側とサーバー側が同じ契約を共有する(型ライブラリを持たないCOMインターフェースもある)。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/windows/win32/com/the-component-object-model> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
