Question sur l'intérer d'enregister une dll?

[Résolu]
Signaler
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
-
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
-
Bonjour,

J'aurai besoin de partager une dll en vb.net qui est utilisée dans plusieurs de mes programmes. Je cherche depuis ce matin je trouve des sources des exemples etc... mais quel est l'intérêt d'enregistrer une dll. Le plus pratique serait de mettre ma dll dans system32.
j'ai essayé regsvr32 mais,
regsvr32 me retourne comme quoi il ne trouve pas d'entry point DllRegisterServer sur ma dll.
J'ai trouvé cette source pour éviter regsvr32
http://www.vbfrance.com/codes/DLLREGISTER-VRAI-REGISTER-UNREGISTER-OCX-SANS-REGSVR32_2008.aspx
mais pareil, comme j'ai du mal a comprendre le fonctionnement théorique, j'ai du mal a avancer.

J'ai trouvé aussi des truc avec regasm et tlb mais il faudrait m'expliquer
J'ai également essayer le "register for com interop" dans les propiétés de ma dll, VS me renvoi: "warning MSB3214: "...\bin\Release\Madll.dll" does not contain any types that can be registered for COM Interop."

Voila j'aimerai savoir juste ce qu'il faut faire pour que que je puisse partager ma dll dans mes différents exe, et aujourd'hui j'utilise imports dans mes source dois-je le changer avec loadlibrary?
Merci par avance
@+
youpi :)

9 réponses

Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Les assemblies .NET se mettent dans le Global Assemply Cache (GAC) pour être partagés. Les outils comme regsvr32 ont pour but de partager une DLL COM en y mettant une référence dans la base de registre. Par défaut, un assembly .NET n'est pas accessible par COM, donc il ne te sers à rien (d'ailleur ça ne fonctionne pas) d'utiliser regsvr32. Pour permetre à un assembly .NET d'être accessible par COM, il faut lui ajouter qq trucs.

Utilisation d'assemblys et du Global Assembly Cache (MSDN)
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"Mais j'ai du mal a comprendre comment on peut partager la même dll entre plusieurs executable."

Tu n'as rien à faire si ce n'est de mettre ta DLL dans le GAC (C:\Windows\Assembly)
Tous les programmes .NET ont accès au GAC sans devoir déclarer quoi que ce soit. Donc il peuvent utiliser n'importe que DLL qui se trouve dans le GAC sans devoir déclarer la DLL dans le code, c'est le cas pour tous les assembly du framework par exemple. Il faut tout de même ajouter une référence à la DLL dans ton projet.
Je ne l'ai jamais fais, mais ClickOnce par exemple devrait avoir une option pour pouvoir spécifier qu'une DLL doit être installé dans le GAC au lieu d'être placé dans le répertoire du programme.
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
Il est effectivement possible d'installer dans la global assembly cache lors d'un projet setup en choisissant les special folder->Global Assembly Cache Folder
il install bien dans la gac et de-install bien de la gac.
Merci pour ton aide [auteur/KEVINORY/183467.aspx Kevin.Ory]
@+
youpi :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
Bon j'en suis ici:
d'apres cette article:
http://www.experts-exchange.com/Programming/Programming_Languages/Dot_Net/Q_21741951.html
"Dll's created by .net languages does not need to beregistered, you can use a .net dll just by referencing to it."
et le post renvoi sur cette page qui m'a aidé:
http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=106

J'ai créé mon .snk (strong name) et J'ai mis dans les options de ma dll (signing) mon chemin vers mon snk.
J'ai pu ensuite faire un gacutil /i madll.dll
mon assembly ce trouve bien dans C:\WINDOWS\assembly

Par contre je ne sais vraiment pas comment le deployé si quelqu'un peux m'aider..
Merci,
@+
youpi :)
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"Par contre je ne sais vraiment pas comment le deployé si quelqu'un peux m'aider.."

Le plus simple est d'utiliser un programme d'installation
Sinon tu peux aussi utiliser gacutil depuis ton code.. ou trouver une autre solution...
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
Merci pour ton explication ceci m'éclaire un petit peu. pour le deployement j'avais remarqué lors de l'install qu'il récupère la dll automatiquement.
J'ai également remarqué qu'il importe automatiquement le .tlb, doit-je utiliser regasm pour éviter qu'il l'importe? sinon je vois pas l'intérer de l'importer dans l'install.
En faite gacutil me permet de plus facilement lié les progs<-> dll à la compilation mais ceci ne me permet pas de partager la dll, et c'est au final ce que j'aimerai faire, mettre dans Common Files
ou system32 il existe un moyen avec une dll .net?
Je vais regarder tes liens pour fouiller un peu la documentation. merci encore pour tes eclaircissement.
@+
youpi :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
Cette addresse me permet de comprendre les différences entre dll win32 et les assemblies .net
http://support.microsoft.com/kb/815065/fr, sous le sujet "L'assembly .NET Framework"

Mais j'ai du mal a comprendre comment on peut partager la même dll entre plusieurs executable.
@+
youpi :)
Messages postés
539
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
14 juillet 2010
1
Super pour tes précisions. En effet, j'ai remarqué cela. Une dernière question, lorsque l'on créé un setup project et que l'on choisit assembly, est-ce qu'il install l'assembly dans le GAC automatiquement? doit-on mettre des instructions dans le post?
Merci pour tes précisions.
@+
youpi :)
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Je ne sais pas, je ne l'ai jamais fais. Mais je doute fort qu'il mette qqch dans le GAC sans demande explicite. Seul les DLL partagées doivent être placé dans le GAC, ce qui est plutôt rare...