FAQ
COM コンポーネント カテゴリおよび COM 相互運用機能をカスタム コンポーネントで使用する方法
ナレッジ番号:5261 | 登録日:2023/07/26 | 更新日:2024/11/21
サマリー
従来の .NET 開発者にとって、コンポーネント オブジェクト モデル(COM)の独特な特性の中には、あまり慣れていないものもあるかもしれませんが、ArcObjects によるカスタム コンポーネントの開発では理解しておく解があります。このトピックは、Visual Studio プロジェクトに COM コンポーネント カテゴリ登録情報をもたせ、COM 相互運用機能を有効にするための方法を説明します。この情報は、デバッグや配布を行う際に必要です。
内容
COM コンポーネント カテゴリの決定と COM 相互運用機能の有効化
COM コンポーネント カテゴリと COM 相互運用機能
操作を始める前に、以下の前提について確認してください。
- ArcGIS Desktop カスタム コンポーネント(以降カスタム コンポーネント)が、COM インタフェースまたは ESRI ベース クラス の実装に基づいて、Visual Studio で作成されています。
- カスタム コンポーネントの Category プロパティは、"Developer Samples" に設定されています。
- カスタム コンポーネントの Caption プロパティは、"Caption_ArcMapClassLibrary_Implements" に設定されています。
- カスタム コンポーネントは、"DevelopmentPC" というコンピュータ上で作成されています。
- カスタム コンポーネントは、"TargetPC" というコンピュータ上に導入されます。
- このトピックにおけるカスタム コンポーネントは、ArcGIS Desktop アプリケーション(ArcMap、ArcGlobe、ArcScene、または ArcCatalog)の [ユーザー設定] ダイアログ上に表示されるタイプで、ArcGIS Desktop のグラフィカル ユーザ インタフェース(GUI)への追加や削除が可能です。一般的に、これらのタイプのカスタム コンポーネントには、ボタン、ツール、ツールバーがあります。[ユーザー設定] ダイアログ ボックスには表示されず、このトピックとは関連性のないカスタム コンポーネントとしては、エクステンション、ドッカブル ウィンドウ、カスタム テーブル オブ コンテンツ(TOC)などがあります。
カテゴリ情報が利用可能かつ有効でなければならない理由
COM システムは、コンポーネント カテゴリという Windows レジストリ領域を使用します。概念的には、コンポーネント カテゴリとは、特定のタイプの機能を提供するクラスを論理的にグループ化するのに便利な手段です。特定のカテゴリにあるすべてのクラスは、通常、承認された一連のインタフェースをサポートしますが、しばしばクラスが機能の意味的記述である場合もあります。どのアプリケーションも、前もってアプリケーションが正確なクラス名を知っておく必要なしに、Windows レジストリにあるコンポーネント カテゴリの内容を実行時に判読し、どのクラスが特定の機能をサポートしているかについて情報を収集することができます。
ArcGIS 10 以前は、ArcGIS の拡張性を高めるために、ArcObjects は Windows レジストリにあるコンポーネント カテゴリを多用していました。ArcGIS カスタム コンポーネントからコンポーネント カテゴリ情報を取り出し、Windows レジストリにコンポーネント カテゴリ情報を登録するために、Windows の RegAsm.exe ユーティリティが使用されました。ArcGIS Desktop アプリケーションが実行されたとき、アプリケーションは、Windows レジストリのコンポーネント カテゴリを調べ、拡張可能な、どのカスタマイズ オプションが利用できるか確認していました。
ArcGIS 10 の開始に伴い、COM コンポーネント カテゴリ情報を保持するために Windows レジストリの使用を取りやめました。代わりとなる方法は、新しい登録ユーティリティ(ESRIRegAsm.exe)と、 "製品とバージョン" がリリースされるごとに作成される Configuration フォルダに格納されている拡張マークアップ言語(XML)データベースから成り立っており、システム レジストリからは独立しています。そのため、コンポーネントの登録と、開発者が作成したアセンブリやダイナミック リンク ライブラリに対するカテゴリ情報の登録は、ESRIRegAsm と呼ばれる新しく ESRI が提供するユーティリティによって行われます。
COM コンポーネント カテゴリ登録情報が(Windows レジストリあるいは ESRI XML データベースのどちらに保持されるとしても)利用可能な状態で、且つ ArcGIS Desktop カスタム コンポーネントの COM 相互運用機能が有効でなければならない理由は、デバッグ時や導入時の問題を避けるためです。
正しいコンポーネント カテゴリ登録情報を持ち、Visual Studio プロジェクトで COM 相互運用機能が有効な ArcGIS Desktop カスタム コンポーネントは、ArcGIS Desktop アプリケーション(ArcMap、ArcGlobe、ArcScene、または ArcCatalog)の [ユーザー設定] ダイアログ ボックスに表示されます。ArcMap の [ユーザー設定] ダイアログ ボックスに表示されるカスタム コンポーネントは、以下のスクリーン ショットのようになります。
COM コンポーネント カテゴリの決定と COM 相互運用機能の有効化
ESRI の Visual Studio 統合開発環境(IDE)を用いてカスタム コンポーネントを作成すると、コンポーネント カテゴリ情報をや COM 相互運用機能を有効にするかどうかを容易に決定することができます。ESRI の Visual Studio IDE フィーチャは、ArcObjects .NET ソフトウェア開発キット(SDK)の一部としてインストールされます。COM コンポーネント カテゴリが ArcMap に登録されることを決定し、そのプロジェクトの COM 相互運用機能を有効にするためには、以下の手順に従います。
- DevelopmentPC 上で Visual Studio を起動し、カスタム コンポーネントを含むプロジェクトを開きます。
- プロジェクトをクリックし、次に [Add Component Category] を選択します。
- [Add Component Category] をクリックすると、ArcGIS Component Category Registrar ダイアログ ボックスが表示されます。
- [Class] ドロップダウン リストをクリックし、カスタマイゼーションを含む適用可能なクラスを選択します。そして、[Categories] セクション下にある選択されたカテゴリを確認します。この例では、カスタマイゼーションは、ArcMapClassLibrary_Implements.ArcGISClass1 クラス内に存在し、 "ArcMap Command" カテゴリが選択されています。[Properties] セクション下では、[Caption] プロパティが "ESRI Mx Commands" となっています。
- [Register for COM Interop] チェック ボックスが選択されていることを確認します。
COM コンポーネント カテゴリが正しく 登録されることを確定する別の方法として、プロジェクトのクラス コード内で ArcGISCategoryRegistration メソッドを確認する方法があります。
以下の VB.NET のスクリーン ショットでは、コマンドが登録される ArcMapClassLibrary_Implements.ArcGISClass1 クラスは "MxCommands" であることが確認できます。
以下の C# のスクリーン ショットでは、コマンドが登録される ArcMapClassLibrary_Implements.ArcGISClass1 クラスは "MxCommands" であることが確認できます。
- カスタム コンポーネントのプロジェクト プロパティで、COM 相互運用機能が選択されていることを確認するために、[プロジェクト] メニューをクリックし、[<プロジェクト名>のプロパティ] を選択します。
- メニューから [<プロジェクト名>のプロパティ] を選択すると、プロパティ情報が表示されます。[COM 相互運用機能の登録] のチェック ボックスがオンになっていることを確認します。
VB.NET プロジェクトでは、[COM 相互運用機能の登録] は、コンパイル タブにあります。
C# プロジェクトでは、[COM 相互運用機能の登録] は、ビルド タブにあります。
参照:
カスタム コンポーネントの Category および Caption プロパティ情報を取得する
開発ライセンス 配布ライセンス Basic Basic Standard Standard Advanced Advanced Engine Developer Kit Engine Runtime
この文書は、ArcObjects Help for .NET Developers 内のトピック How to ensure that COM component category and COM interop are used in custom components を元に翻訳したものです。
メタデータ
種類
製品