4

私が開発した登録不要の COM コンポーネントは、コンポーネントを登録する必要なくターゲット マシンで正常に動作します。これは、tlb が埋め込まれた dll と、アセンブリの依存関係とコンポーネントの CLSID を一覧表示するマニフェストを持つ RT_MANIFEST リソースにあります。

Visual Studio(2008) では、私が試した少なくとも 2 つのことを行うために、この COM コンポーネントを登録する必要があります。コンポーネントへの参照を追加するとき、コンポーネントが登録されていないと、参照用に分離されたプロパティを選択できません。コンポーネントが登録されていない限り、デバッガーの実行中にオブジェクトのインスタンスを作成することもできません。ただし、参照を追加してアプリケーションをコンパイルし、コンポーネントを登録せずに実行できます。

Visual Studio で登録不要の COM コンポーネントを登録せずに使用する方法はありますか?それとも、すべてが正しく機能するために開発マシンに登録する必要がありますか?

4

1 に答える 1

9

ここでは、コンパイル時と実行時の COM コンポーネントの使用の違いを理解することが重要です。Reg-free COM は純粋にランタイム機能です。COM インターフェイスを記述するマニフェストは、登録不要の部分です。COM コンポーネントをマシンのレジストリに登録する必要はありません。代わりに、登録情報をファイルで提供します。つまり、インストーラーは必要ありません。これは、登録の問題から隔離されていることも意味します。DLL Hell としてよく知られています。

レジストリのキーまたはマニフェストのエントリは、COM クライアントが COM オブジェクトのインスタンスの作成を要求したときに、どの DLL を読み込む必要があるかを COM が判断するのに役立ちます。

これは、コンパイル時とは大きく異なります。タイプ ライブラリは、正しいコードを記述したかどうかをコンパイラに伝えるのに非常に役立ちます。COM コンポーネントには本当に IFoo インターフェイスがありますか? IFoo インターフェイスには、2 つの引数を取る Mumble() メソッドが本当にありますか? タイプ ライブラリは、インターフェイスがどのように見えるかをコンパイラに伝え、コンパイラが記述したコードに対して静的チェックを実行できるようにします。'late-binding' とは異なります。これは、タイプ ライブラリを使用せずに (つまり、型チェックを使用せずに) COM クライアント コードを記述できるようにするオプションです。スクリプト言語で一般的です。

繰り返しますが、登録不要の COM は純粋にインストールに関するものであり、コードの記述に関するものではありません。

于 2011-06-15T01:19:18.383 に答える