web-dev-qa-db-ja.com

DLL=を登録するとどうなりますか?

Dllを登録する方法は知っていますが、なぜそれを行っているのか、dllをどのような条件で登録しなければならないのか、私には本当にわかりません。誰かが私にいくつかのドキュメントを説明したり、指摘したりできますか?

59
stimms

DLLが登録されると、DLLのDllRegisterServerメソッドエントリポイントが呼び出されます。同様に、DllUnregisterServerが呼び出されますDLLが未登録の場合。

このMSDN記事 で説明されているとおり:

このサーバーモジュールでサポートされるすべてのクラスのレジストリエントリを作成するようにインプロセスサーバーに指示します。この関数が失敗した場合、すべてのクラスのレジストリの状態は不確定です。

COM DLLの場合、必要に応じて登録/登録解除を行う独自のDllRegisterServerおよびDllUnregisterServerエントリポイントメソッドを実装する必要があります。 DllRegisterServerのサンプルコードは here にあります。

DLLの登録の最終結果は、DLLのコンポーネントのCLSIDがすべてHKEY_CLASSES_ROOT\CLSID。これにより、別のDLLまたはアプリケーション)からCOMオブジェクトをインスタンス化するときに、CoCreateInstanceが正しいサーバーを見つけることができます。

DllUnregisterServerは逆の処理を行い、DllRegisterServerによってそこに置かれたレジストリからすべてのCLSIDを削除します。

DllRegisterServerに関するより一般的な情報は here にあります。

44

DLL登録と呼ばれるものは、COMオブジェクトを実装するときです。regsvr32は、オブジェクトのインスタンスを作成できるようにします。たとえば、VBScriptがNewまたはCreateObject()を使用する場合、名前またはCLSIDを問わず、COMが新しいインスタンスを作成するためにロードするものをDLLを知っていることを確認します。

(非常に)簡単な要約については、 "素人の説明" をご覧ください。

6
Pontus Gagge

Regsvr32.exeのソースコードを参照してください。

1
sylvain99