知識マップ: .NET 8 DLLをVBAから型付きで使う方法 - COM公開とdscom TLB
記事「.NET 8 DLLをVBAから型付きで使う方法 - COM公開とdscom TLB」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
.NET 8のクラスライブラリをVBAから型付きで利用するには、COMの型情報であるタイプライブラリが不可欠で、これはdscomというツールが.NET Frameworkで廃止されたtlbexp.exeやRegAsm.exeの後継として生成・登録します。.NET側はEnableComHostingでビルドしたCOM hostをCOMの起動入口とし、regsvr32での登録とOfficeとのbitness一致が前提になります。VBA側はタイプライブラリを参照設定で読み込むことで早期バインディングが使え、CreateObjectによる遅延バインディングより型安全に使えます。公開後の互換性はIIDやCLSIDの扱いとClassInterfaceTypeの選び方に左右され、ClassInterfaceType.NoneとInterfaceIsDual、DispIdの組み合わせがVBA参照の破損を避ける定石です。
flowchart LR
accTitle: 「.NET 8のDLLをVBAから型付きで使う方法の知識マップ」
accDescr: VBAが早期バインディングでCOMを型付きに使うにはタイプライブラリが必要で、dscomがそのTLB生成と登録を担い、.NET 8側はCOM hostとして公開されること、ClassInterfaceTypeやIID・CLSIDの扱いがVBA参照の互換性にどう影響するかを示す図
vba["VBA(Visual Basic for Applications)"]
dscom["dscom"]
type_library["型ライブラリ(TLB)"]
com_early_binding["早期バインディング(VBA)"]
com_late_binding["遅延バインディング(CreateObject)"]
tlbexp_regasm["tlbexp.exe / RegAsm.exe"]
comhost["COM host(*.comhost.dll)"]
regsvr32["regsvr32"]
dotnet[".NET(Core以降)"]
com["COM(コンポーネントオブジェクトモデル)"]
iid["IID(インターフェース識別子)"]
clsid["CLSID(Class ID)"]
vba_reference_break["VBA参照・登録の破損"]
classinterfacetype_autodual["ClassInterfaceType.AutoDual"]
classinterfacetype_none["ClassInterfaceType.None"]
dispid_attribute["DispIdAttribute"]
interface_is_dual["InterfaceIsDual(デュアルインターフェイス)"]
hresult["HRESULT"]
dotnet_exception[".NET例外"]
com_visible_attribute["ComVisibleAttribute"]
bitness_match_requirement["bitness一致要件"]
vba -.->|"前提とする"| type_library
com_early_binding -->|"前提とする"| type_library
vba -->|"利用する"| com_early_binding
vba -->|"利用する"| com_late_binding
com_late_binding -.->|"用いるのは非推奨"| vba
dscom -->|"実装を担う"| type_library
dscom -->|"の後継"| tlbexp_regasm
type_library -.->|"で構成できる"| dscom
comhost -->|"で構成できる"| regsvr32
comhost -->|"前提とする"| dotnet
comhost -->|"実装を担う"| com
vba -.->|"利用する"| com
com -->|"前提とする"| iid
com -->|"前提とする"| clsid
iid -.->|"原因になり得る"| vba_reference_break
clsid -.->|"原因になり得る"| vba_reference_break
classinterfacetype_autodual -.->|"原因になり得る"| vba_reference_break
classinterfacetype_autodual -->|"用いるのは非推奨"| vba
classinterfacetype_none -->|"推奨される対応"| vba
dispid_attribute -->|"軽減する"| vba_reference_break
interface_is_dual -->|"推奨される対応"| vba
com -->|"利用する"| hresult
dotnet_exception -.->|"で確認できる"| hresult
dotnet -->|"で構成できる"| com_visible_attribute
comhost -->|"前提とする"| bitness_match_requirement
dscom -.->|"前提とする"| bitness_match_requirement
regsvr32 -->|"前提とする"| bitness_match_requirement
概念間の関係(全27件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- VBA(Visual Basic for Applications)は型ライブラリ(TLB)を前提とします。
- 早期バインディング(VBA)は型ライブラリ(TLB)を前提とします。
- VBA(Visual Basic for Applications)は早期バインディング(VBA)を利用します。
- VBA(Visual Basic for Applications)は遅延バインディング(CreateObject)を利用します。
- 遅延バインディング(CreateObject)をVBA(Visual Basic for Applications)に用いることは推奨されません。
- dscomは型ライブラリ(TLB)の実装を担います。
- dscomはtlbexp.exe / RegAsm.exeの後継に当たります。
- 型ライブラリ(TLB)はdscomで構成できます。
- COM host(*.comhost.dll)はregsvr32で構成できます。
- COM host(*.comhost.dll)は.NET(Core以降)を前提とします。
- COM host(*.comhost.dll)はCOM(コンポーネントオブジェクトモデル)の実装を担います。
- VBA(Visual Basic for Applications)はCOM(コンポーネントオブジェクトモデル)を利用します。
- COM(コンポーネントオブジェクトモデル)はIID(インターフェース識別子)を前提とします。
- COM(コンポーネントオブジェクトモデル)はCLSID(Class ID)を前提とします。
- IID(インターフェース識別子)はVBA参照・登録の破損の原因になることがあります。
- CLSID(Class ID)はVBA参照・登録の破損の原因になることがあります。
- ClassInterfaceType.AutoDualはVBA参照・登録の破損の原因になることがあります。
- ClassInterfaceType.AutoDualをVBA(Visual Basic for Applications)に用いることは推奨されません。
- ClassInterfaceType.NoneはVBA(Visual Basic for Applications)に対する本記事の推奨です。
- DispIdAttributeはVBA参照・登録の破損を軽減します。
- InterfaceIsDual(デュアルインターフェイス)はVBA(Visual Basic for Applications)に対する本記事の推奨です。
- COM(コンポーネントオブジェクトモデル)はHRESULTを利用します。
- .NET例外はHRESULTで確認できます。
- .NET(Core以降)はComVisibleAttributeで構成できます。
- COM host(*.comhost.dll)はbitness一致要件を前提とします。
- dscomはbitness一致要件を前提とします。
- regsvr32はbitness一致要件を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。