開発マシンに登録せずに登録なしのCOMコンポーネントを使用できますか?
-
28-10-2019 - |
質問
私は開発した登録なしのcomコンポーネントを持っています。これは、コンポーネントを登録する必要なくターゲットマシンで正常に動作しています。 TLBが埋め込まれたDLLと、コンポーネントのアセンブリ依存関係とCLSIDをリストするマニフェストを持つRT_MANIFESTリソースです。
Visual Studio(2008)では、私が試した少なくとも2つのことを行うには、このcomコンポーネントを登録する必要があります。コンポーネントへの参照を追加する場合、コンポーネントが登録されていない限り、参照用の分離プロパティを選択することはできません。また、コンポーネントが登録されていない限り、デバッガーが実行されているときにオブジェクトのインスタンスを作成することもできません。ただし、リファレンスを追加してアプリケーションをコンパイルし、コンポーネントを登録せずに実行できます。
Visual Studioで登録せずに登録のないCOMコンポーネントを使用する方法はありますか、それともすべてが正しく機能するために開発機に登録する必要がありますか?
解決
ここでは、COMコンポーネントのコンパイル時間とランタイムの使用の違いを理解することが重要です。登録済みのCOMは、純粋にランタイム機能です。 comインターフェイスを説明するマニフェストは、登録のない部分です。マシンのレジストリにcomコンポーネントを登録する必要はありません。代わりに登録情報をファイルに提供します。つまり、インストーラーは必要ありません。また、登録の問題から断熱されていることも意味します。 Dll Hellとしてよく知られています。
レジストリ内のキー、またはマニフェストのエントリは、COMクライアントがCOMオブジェクトのインスタンスを作成するように要求するときにCOMを把握するのを支援するために重要です。
これは、コンパイル時間とは非常に異なります。タイプライブラリは、正しいコードを書いたかどうかをコンパイラに伝えるのに非常に役立ちます。 comコンポーネントには本当にifooインターフェイスがありますか? iFooインターフェイスには、2つの引数を取得するMumble()メソッドが本当にありますか?タイプライブラリは、コンパイラにインターフェイスがどのように見えるかを伝え、コンパイラが書いたコードを静的チェックすることができます。 「後期バインディング」BTWとは異なります。これは、タイプライブラリなしで(したがってタイプチェックなしで)comクライアントコードを作成できるオプションです。スクリプト言語で一般的です。
繰り返します:登録のないcomは、コードの作成ではなく、純粋にインストールに関するものです。