2009-03-06 8 views
51

Je sais comment enregistrer des DLL mais je n'ai jamais vraiment été sûr de savoir pourquoi je le faisais ou dans quelles conditions un DLL doit être enregistré. Quelqu'un pourrait-il m'expliquer ou me diriger vers une documentation?Que fait l'inscription d'une DLL?

Répondre

40

Lorsqu'une DLL est enregistrée, le point d'entrée de la méthode DllRegisterServer dans votre DLL est appelé. De même, DllUnregisterServer est appelée lorsqu'une DLL est désenregistrée.

Comme décrit dans this MSDN article:

charge un serveur à créer en cours de ses entrées de registre pour toutes les classes pris en charge dans ce module serveur . Si cette fonction échoue, l'état du registre pour toutes ses classes est indéterminé.

Pour les DLL COM, vous devrez mettre en œuvre vos propres méthodes de point d'entrée DllRegisterServer et DllUnregisterServer qui font l'enregistrement/désinscription selon le cas. Exemple de code pour DllRegisterServer peut être trouvé here.

Le résultat final de l'inscription d'une DLL est que tous les CLSID pour les composants de la DLL sont enregistrés sous HKEY_CLASSES_ROOT\CLSID. Cela permet à CoCreateInstance de trouver le serveur correct lors de l'instanciation d'objets COM à partir d'une autre DLL ou application.

DllUnregisterServer fera l'inverse, et supprimera tous les CLSID du registre qui ont été placés là par DllRegisterServer. Les informations plus générales sur DllRegisterServer peuvent être trouvées here.

+0

Lorsque je crée une DLL ActiveX dans VB6 Je n'ai pas à mettre en œuvre DllRegisterServer. – CJ7

6

Ce que l'on appelle le plus souvent l'inscription de DLL est quand il implémente un objet COM. regsvr32 garantit qu'une instance de l'objet peut être créée. Lorsque, par exemple, VBScript utilise New ou CreateObject(), l'enregistrement s'assure que COM sait quelle DLL charger afin de créer une nouvelle instance, que ce soit par nom ou CLSID.

Voir "the layman's explanation" pour un (très) bref résumé.

+0

Le lien est rompu. S'il vous plaît fournir un substitut. –

+1

Terminé. Aussi archivé comme https://web.archive.org/web/20170222094351/https://chewychong.wordpress.com/2004/08/23/layman-s-explanation-of-regscvs-regasm-regsvr32/ –

2

voir simplement le code source de regsvr32.exe

+4

J'étais surpris de découvrir que ce code source est réellement disponible avec Visual Studio: http://msdn.microsoft.com/en-us/library/ms177531.aspx –