2009-03-06 17 views
51

私はdllを登録する方法を知っていますが、なぜ私がそれをやっているのか、dllをどのような条件で登録しなければならないのか、本当にわかっていません。誰かが説明したり、いくつかの文書を私に指摘できますか?DLLの登録とは何ですか?

答えて

40

DLLが登録されている場合は、あなたのDLL内DllRegisterServerメソッドのエントリポイントが呼び出されます。同様に、DLLが登録解除されると、DllUnregisterServerが呼び出されます。

this MSDN articleで説明したように:

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

、あなたは、必要に応じて登録/登録解除を行う独自のDllRegisterServerDllUnregisterServerエントリポイントメソッドを実装する必要があります。 DllRegisterServerのコード例はhereです。

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

DllUnregisterServer逆のことを行い、そこに置かれたすべてのCLSIDをDllRegisterServerで削除します。

より一般的な情報を約DllRegisterServerhereを見つけることができます。それはCOMオブジェクトを実装する際に最も一般的DLLの登録と呼ばれるもの

+0

のソースコードを参照してください。 – CJ7

6

です。 regsvr32は、オブジェクトのインスタンスを確実に作成できるようにします。例えば、 VBScriptはNewまたはCreateObject()を使用して、名前またはCLSIDに関係なく、COMによって新しいインスタンスを作成するためにロードするDLLを認識します。

は、(非常に)簡単な要約のため"the layman's explanation"を参照してください。私はVB6でActiveX DLLを作成する場合

+0

リンクが壊れています。代替案を提示してください。 –

+1

完了。また、私はたhttps://web.archive.org/web/20170222094351/https://chewychong.wordpress.com/2004/08/23/layman-s-explanation-of-regscvs-regasm-regsvr32/ –

2

は単に私がのDllRegisterServerを実装する必要はありませんregsvr32.exeを

+4

としてアーカイブこのソースコードがVisual Studioで実際に利用可能であることに驚いています。http://msdn.microsoft.com/en-us/library/ms177531.aspx –

関連する問題