cs_Pijay
Messages postés21Date d'inscriptionmardi 6 mars 2007StatutMembreDernière intervention12 juillet 2007
-
9 mars 2007 à 12:47
cs_Pijay
Messages postés21Date d'inscriptionmardi 6 mars 2007StatutMembreDernière intervention12 juillet 2007
-
31 mai 2007 à 18:39
Bonjour a tous,
Mon probleme est le suivant:
J'ai developpé une DLL .NET (bibliothèque de classe) dans laquelle se présente une méthode (pour concatener deux chaines) et un composant "Form" (IHM).
Je souhaite appeler les composants de ma DLL depuis VBA (Excel en particulier).
J'ai référencé ma DLL (ou plutot le fichier *.tlb) correctement et ma méthode de concatenation fonctionne tres bien.
En ce qui concerne ma Form, lorque je l'appel tout se passe bien. Ma feuille contient un bouton (cmd_IHM) qui appel ma form de la DLL au moment du clique.
Voici de quelle maniere j'instancie ma Form :
Private Sub cmd_IHM_Click()
On Error GoTo ErrHandler
Dim my_form As Object
Set my_form = CreateObject("Lib_2003.Form1")
my_form.Visible = True
Exit Sub
ErrHandler:
MsgBox Err.Number & " : " & Err.Description
End Sub
LE PROBLEME, se présente lorsque je la ferme. En effet, que ca soit avec la croix de fermeture ou à partir d'un bouton (implemeté avec Dispose() ou Close()) un message d'avertissement intervient :
Lorque je clique "Continue", un message d'erreur s'affiche:
Est-ce que quelqu'un aurait une idée au sujet de cette erreur. En effet mon application Excel "plante" et se ferme a la suite de ce messages.... et je comprend pas poukoi? Est-ce due a conflit lors de la destruction du composant Form?
Informations supplementaires: Ma DLL à été développé en VB.NET (Visual Studio 2003)
cs_Pijay
Messages postés21Date d'inscriptionmardi 6 mars 2007StatutMembreDernière intervention12 juillet 2007 31 mai 2007 à 18:39
J'ai trouvé d'ou vient le probleme, je pense que ca peut aider certain.
Quelques notions: En effet, les composant .Net sont géré par le CAS(Code Acces Security). En fonction de la stratégie de sécurité, les composants .Net n'ont pas le meme statut en fonction de l'endroit ou ils se trouvent. Par exemple, une DLL.Net n'a pas les memes droits en local que sur l'Intranet d'une entreprise. En effet, par defaut la politique de sécurité du .Net considere les composants d'un intranet (ou d'internet) comme des composants à confiance partielle ("Partially Trust").
Ce qu'il faut savoir, c'est que implicitement les applications ou librairies .Net font appel à des composants installés en local comme mscorlib.dll (GAC ou System32/). Ces composant (mscorlib.dll ou mscoree.dll par exemple) exigent d'etre appelé par des composants de confiance totale ("Full Trust"). Ce qui n'est pas le cas d'un composant placé sur le réseau (Intranet ou Internet).
Pour déployé une librairie.Net sur un réseau (d'entreprise par exemple), il faut obligatoirement avoir les droits d'administration sur les machines clients pour modifier la politique de sécurité du .Net Framework (utilisation du .Net Configuration Tool > voir méthode sur le net, il y en a plein)
Si vous ne posseder pas les droits d'administration (mon cas), vous etes obligé d'installer votre compsant.Net (dll) en local (pour qu'il soit considéré comme un composant "Full Trust").
Revenons a mon probleme :
En effet le probleme intervient avec ma form car elle fait appel a des dll (mscorelib.dll entre autres) pour se fermer. Les controles .Net sont régis par les dll installé en local (c:/ par ex.) et appel différentes méthodes utilisé dans les form.Net (fermeture d'un interface dans mon cas). Dans mon cas cela génere bien une exception de sécurité (Securtiy Exception) car ma dll.Net ne possede pas les droits (elle n'est pas "Full Trust" quand elle est sur le réseau).
Le probleme ne se pose pas avec la méthode de concatenation car c'est une fonction simple, ne faisant intervenir aucune librairie exterieures.
Donc voila, un petit résumé de plusieurs jours de recherche. Je sais pas si ca peut aider quelqu'un, mais vu la difficulté que j'ai eu à trouver des informations concretes sur le déploiement de DLL.Net, je prefere laisser ce post.