web-dev-qa-db-fra.com

À quoi sert l'enregistrement d'un DLL?

Je sais comment enregistrer des DLL, mais je n'ai jamais vraiment su pourquoi je le fais ou dans quelles conditions une DLL doit être enregistrée. Quelqu'un pourrait-il m'expliquer ou me diriger vers une documentation?

59
stimms

Lorsqu'un DLL est enregistré, le point d'entrée de la méthode DllRegisterServer dans votre DLL est invoqué. De même, DllUnregisterServer est invoqué quand un DLL n'est pas enregistré.

Comme décrit dans cet article MSDN :

Demande à un serveur en cours de création de ses entrées de registre pour toutes les classes prises 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 implémenter vos propres méthodes de point d'entrée DllRegisterServer et DllUnregisterServer qui effectuent l'enregistrement/le désenregistrement comme il convient. Un exemple de code pour DllRegisterServer peut être trouvé ici .

Le résultat final de l'enregistrement d'un DLL est que tous les CLSID des composants dans le DLL sont enregistrés sous HKEY_CLASSES_ROOT\CLSID. Cela permet à CoCreateInstance de trouver le bon serveur 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 y ont été insérés par DllRegisterServer.

Des informations plus générales sur DllRegisterServer peuvent être trouvées ici .

44

Ce qui est le plus communément appelé DLL s’enregistrer, c’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 garantit que COM sait quoi DLL à charger pour créer une nouvelle instance, que ce soit par son nom ou CLSID.

Voir "l'explication du profane" pour un (très) bref résumé.

6
Pontus Gagge

Voir simplement le code source de regsvr32.exe

1
sylvain99