65 votes

Que fait l'enregistrement d'une DLL ?

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

47voto

LeopardSkinPillBoxHat Points 11851

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

Comme décrit dans cet article de MSDN :

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

Pour les DLLs COM, vous devrez implémenter votre propre DllRegisterServer y DllUnregisterServer des méthodes de point d'entrée qui effectuent l'enregistrement/désenregistrement selon le cas. Exemple de code pour DllRegisterServer peuvent être trouvés ici .

Le résultat final de l'enregistrement d'une DLL est que tous les CLSID des composants de la DLL sont enregistrés sous le nom de HKEY_CLASSES_ROOT\CLSID . Cela permet CoCreateInstance pour 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 ont été mis là par DllRegisterServer .

Informations plus générales sur DllRegisterServer peuvent être trouvés ici .

0 votes

Lorsque je crée une DLL ActiveX en VB6, je ne dois pas mettre en œuvre DllRegisterServer.

8voto

Pontus Gagge Points 12950

On parle le plus souvent d'enregistrement de DLL lorsqu'elle met en œuvre 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 quelle DLL charger afin de créer une nouvelle instance, que ce soit par le nom ou le CLSID.

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

0 votes

Le lien est rompu. Veuillez fournir une alternative.

1 votes

Terminé. Également archivé en tant que web.archive.org/web/20170222094351/https://…

2voto

-2voto

Il suffit de voir le code source de regsvr32.exe

6 votes

J'ai été surpris de découvrir que ce code source est en fait disponible avec Visual Studio : msdn.microsoft.com/fr/us/library/ms177531.aspx

2 votes

"Simplement" ... (c'est au moins subjectif, si ce n'est un peu chargé)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X