知識マップ: .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参照の破損を避ける定石です。

「.NET 8のDLLをVBAから型付きで使う方法の知識マップ」VBAが早期バインディングでCOMを型付きに使うにはタイプライブラリが必要で、dscomがそのTLB生成と登録を担い、.NET 8側はCOM hostとして公開されること、ClassInterfaceTypeやIID・CLSIDの扱いがVBA参照の互換性にどう影響するかを示す図前提とする前提とする利用する利用する用いるのは非推奨実装を担うの後継で構成できるで構成できる前提とする実装を担う利用する前提とする前提とする原因になり得る原因になり得る原因になり得る用いるのは非推奨推奨される対応軽減する推奨される対応利用するで確認できるで構成できる前提とする前提とする前提とするVBA(Visual Basic for Applications)dscom型ライブラリ(TLB)早期バインディング(VBA)遅延バインディング(CreateObject)tlbexp.exe / RegAsm.exeCOM host(*.comhost.dll)regsvr32.NET(Core以降)COM(コンポーネントオブジェクトモデル)IID(インターフェース識別子)CLSID(Class ID)VBA参照・登録の破損ClassInterfaceType.AutoDualClassInterfaceType.NoneDispIdAttributeInterfaceIsDual(デュアルインターフェイス)HRESULT.NET例外ComVisibleAttributebitness一致要件

概念間の関係(全27件)

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

主要概念の定義

VBA(Visual Basic for Applications)
Officeアプリケーションに組み込まれたBASIC系のマクロ言語で、ExcelやAccessなどからCOMコンポーネントを呼び出せる。
dscom
.NETアセンブリからCOMのタイプライブラリ(TLB)を生成・登録するための、dSPACE社製オープンソースのコマンドラインツール。
早期バインディング(VBA)
VBAが参照設定でタイプライブラリを読み込み、コンパイル時に型やメンバーを解決してCOMオブジェクトを扱う呼び出し方式。
遅延バインディング(CreateObject)
型情報を持たず、実行時にメンバーを解決してCOMオブジェクトを扱うVBAの呼び出し方式。変数はObject型になる。
型ライブラリ(TLB)
インターフェース、メソッド、引数の型といった型情報をバイナリで持つファイル。VB6や.NETから型付きでCOMを呼び出す際の情報源になる。
COM host(*.comhost.dll)
.NET 5+/.NET 8でCOMコンポーネントを公開する際の入口となるDLLで、EnableComHostingにより生成される。
COM(コンポーネントオブジェクトモデル)
公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
IID(インターフェース識別子)
COMインターフェース(契約)を一意に識別するGUID。契約の内容が変われば必ず新しいIIDになる。
CLSID(Class ID)
COMコンポーネントの実装(クラス)を一意に指すGUID。レジストリ上の登録の鍵になる識別子。
ClassInterfaceType.AutoDual
クラスのpublicメンバーから自動的にデュアルのクラスインターフェイスを生成する指定。メンバー順や構成を変更すると互換性を壊しやすい。
ClassInterfaceType.None
.NETクラスの自動生成クラスインターフェイスを作らず、明示的に定義したインターフェイスだけをCOMに公開する指定。
DispIdAttribute
COMメンバーにディスパッチIDを明示的に割り当てる.NET属性で、公開後のメンバー順変更による事故を減らす。
InterfaceIsDual(デュアルインターフェイス)
早期バインディングと遅延バインディングの両方に対応するデュアルインターフェイスとしてCOMに公開する.NETの属性指定。
.NET例外
回復不能な異常が起きた箇所からthrowされ、呼び出し元へスタックを遡って伝播し、catchで捕捉される.NETのエラー通知の仕組み。
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
regsvr32
DLLやOCXなどのCOMコンポーネントをレジストリへ登録・登録解除するコマンドラインツール。

機械可読データ

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