| ||||||||||||||||||||||||||||||||||||||||||||||
サイト内検索
カスタム検索
|
レジストリへの登録機能 ~ 作ってわかる COM の基礎単純な COM コンポーネントを構成する要素と役割さて、ここでは非常に単純だけれども、基本的な構成要素を備える完全な COM コンポーネントを作成します。 これを DLL で実装しますが、次の要素を含みます。
ここで新たに 「レジストリへの登録」 と「クラスファクトリ」 というトピックが出てきました。 それぞれについて説明しましょう。 レジストリへの登録機能COM の機能を利用するためには、COM のクラス ID をレジストリに登録します。 COM+ では RegDB という COM+ の登録用データベースに登録することになりますが、 ここでは「基本形」としてレジストリに登録すればよいということを覚えてください。 COM+ についてはまた別の機会にお話しますが、基礎となる COM を知らないとどこが違うか分らないと思います。
さて、「レジストリに登録する」 と言っても、どんなレジストリエントリを構成すればよいのでしょうか。
レジストリをこのように構成しておくことによって、 例えば 「クラス ID が {0069c1ec-3242-4e30-b7c2-0f5cc3a19453} である、COM コンポーネントを実装する DLL をロードしたい!」 と思ったときに、レジストリの HKEY_CLASSES_ROOT\CLSID\{0069c1ec-3242-4e30-b7c2-0f5cc3a19453}\InprocServer32 の値から DLL のパスを取得することができ、 その DLL をロードすることができます。 ここで出てきたプログラム識別子 というのは、COM コンポーネントの名前と考えれば良いです。 COM システム内部では、 COM のクラスやインターフェイスを識別するために世界で一意の GUID を利用します。 しかしながら、GUID は長ったらしくて覚えにくいものですから、便宜上名前を付けることができるのです。 そこで使うのがプログラム識別子 (ProgID) です。 COM コンポーネント DLL をレジストリに登録するために、次のようなコマンドを実行したことがある人もいると思います。 > regsvr32 foo.dll 実はこのコマンドを実行すると foo.dll をロードし、その中の DllRegisterServer という関数が呼び出されます。 従って DllRegisterServer 関数の中にレジストリのへの登録コードを記述しておけば、COM コンポーネントがレジストリへ登録されます。 また、登録を解除するためには次のようなコマンドを実行します。 > regsvr32 /u foo.dll この場合は登録と逆で DllUnregisterServer という関数が呼び出されます。 従って DllUnregisterServer にレジストリの登録を削除するコードを書いておけば、 登録が解除されます。 | |||||||||||||||||||||||||||||||||||||||||||||
© 2008-2010 小山圭介 All Rights Reserved. |
||||||||||||||||||||||||||||||||||||||||||||||