Accueil > > > APPELLER UNE DLL DYNAMIQUEMENT (DANS LE CODE)
APPELLER UNE DLL DYNAMIQUEMENT (DANS LE CODE)
Information sur la source
Description
Bon alors le but de ce code est d'appeler une fonction d'une dll sans la référencer au projet. Les avantages: - On peut appeller une fonction par un interface utilisateur - On peut avoir plusieurs dll, et on peut choisir dans quel dll appeler une fonction (Ex.: Dll multilangue séparés) - Tout autre chose qui peut servir dont on peut pas faire en la référancant :P Les inconvénients: - Les subs ne fonctionnent pas (juste les fonctions) - La fonction doit etre dans un module - Sa fonctionne peut-être juste avec les dll Vb.Net (j'ai pas tester les dll Win32) Pourquoi ce code m'est utile? Bah parce que je fait un serveur html compatible http 1.0 et 1.1 et je veux faire un genre de script cgi mais avec des dll vb.net (je connais pas les cgi)
Source
- 'Pour créer une dll vb.net compatible:
- '=====================================
- '
- ' Créer un nouveau projet 'Class Library' (je l'ai en anglais dsl)
- ' Ajouter un module (renommez comme bon vous semble)
- ' Ajouter votre fonction dans le module et compiler la dll
- '
- ' Ps.: La classe que vb.net a créer ne doit pas etre effacer mais elle peut rester vierge.
- ' Vous pouvez aussi utiliser la classe pour que la dll soit aussi référencable.
- '
- '
- 'Exemple de projet Class Library (compilé 'MaDll.dll'):
- '======================================================
- '
- ' Contient 1 classe nommé 'MaClasse'
- ' Contient 1 module nommé 'MonModule'
- '
- ' Dans le module:
- '
- ' Public Function Additionner(Byval Number1 As Long, Byval Number2 As Long) As Long
- '
- ' Return Number1 + Number2
- '
- ' End Function
- '
- ' Public Function MessageBox(Byval MonTitre As String, Byval MonMessage As String) As Object
- '
- ' MsgBox(MonMessage, , MonTitre)
- '
- ' End Function
- '
- 'Exemple pour l'utiliser (un projet normal):
- '===========================================
- '
- ' Pour appeler la fonction Additionner:
- ' -------------------------------------
- '
- ' Dim MesParams(1) As Object
- '
- ' MesParams(0) = 10
- ' MesParams(1) = 5
- '
- ' MsgBox(CallDll("MaDll.dll", "MonModule", "Additionner", MesParams) 'Retourne 15
- '
- '
- ' Pour appeler la fonction MessageBox:
- ' -------------------------------------
- '
- ' Dim MesParams(1) As Object
- '
- ' MesParams(0) = "MonTitre"
- ' MesParams(1) = "MonMessage"
- '
- ' CallDll("MaDll.dll", "MonModule", "MessageBox", MesParams) 'Affiche un MsgBox (Titre="MonTitre", Message="MonMessage")
- '
- '======================================================================================
- 'Le code ci-dessous est à placer dans un module de votre projet qui va accéder a la dll
-
- Imports System.Reflection
-
- Function CallDll(ByVal Filename As String, ByVal [Module] As String, ByVal Method As String, ByVal Param() As Object) As Object
-
- Try 'Essaie d'appeller la dll
-
- Dim MyAssembly As Assembly = Assembly.LoadFrom(Filename)'Load la dll
- Dim MyAssemblyName As String = Left(MyAssembly.FullName, InStr(MyAssembly.FullName, ",") - 1) 'Trouve le nom du projet
- Dim MyType As Type = MyAssembly.GetType(MyAssemblyName & "." & [Module]) 'Trouve le bon module
- Dim MyMethod As MethodInfo = MyType.GetMethod(Method) 'Trouve la méthode
-
- Return MyMethod.Invoke(MyMethod, Param) 'On appelle la méthode et on retourne sa valeur
-
- Catch 'La dll/module/méthode n'a pas été trouver, on ne retourne rien
-
- Return Nothing
-
- End Try
-
- End Function
'Pour créer une dll vb.net compatible:
'=====================================
'
' Créer un nouveau projet 'Class Library' (je l'ai en anglais dsl)
' Ajouter un module (renommez comme bon vous semble)
' Ajouter votre fonction dans le module et compiler la dll
'
' Ps.: La classe que vb.net a créer ne doit pas etre effacer mais elle peut rester vierge.
' Vous pouvez aussi utiliser la classe pour que la dll soit aussi référencable.
'
'
'Exemple de projet Class Library (compilé 'MaDll.dll'):
'======================================================
'
' Contient 1 classe nommé 'MaClasse'
' Contient 1 module nommé 'MonModule'
'
' Dans le module:
'
' Public Function Additionner(Byval Number1 As Long, Byval Number2 As Long) As Long
'
' Return Number1 + Number2
'
' End Function
'
' Public Function MessageBox(Byval MonTitre As String, Byval MonMessage As String) As Object
'
' MsgBox(MonMessage, , MonTitre)
'
' End Function
'
'Exemple pour l'utiliser (un projet normal):
'===========================================
'
' Pour appeler la fonction Additionner:
' -------------------------------------
'
' Dim MesParams(1) As Object
'
' MesParams(0) = 10
' MesParams(1) = 5
'
' MsgBox(CallDll("MaDll.dll", "MonModule", "Additionner", MesParams) 'Retourne 15
'
'
' Pour appeler la fonction MessageBox:
' -------------------------------------
'
' Dim MesParams(1) As Object
'
' MesParams(0) = "MonTitre"
' MesParams(1) = "MonMessage"
'
' CallDll("MaDll.dll", "MonModule", "MessageBox", MesParams) 'Affiche un MsgBox (Titre="MonTitre", Message="MonMessage")
'
'======================================================================================
'Le code ci-dessous est à placer dans un module de votre projet qui va accéder a la dll
Imports System.Reflection
Function CallDll(ByVal Filename As String, ByVal [Module] As String, ByVal Method As String, ByVal Param() As Object) As Object
Try 'Essaie d'appeller la dll
Dim MyAssembly As Assembly = Assembly.LoadFrom(Filename)'Load la dll
Dim MyAssemblyName As String = Left(MyAssembly.FullName, InStr(MyAssembly.FullName, ",") - 1) 'Trouve le nom du projet
Dim MyType As Type = MyAssembly.GetType(MyAssemblyName & "." & [Module]) 'Trouve le bon module
Dim MyMethod As MethodInfo = MyType.GetMethod(Method) 'Trouve la méthode
Return MyMethod.Invoke(MyMethod, Param) 'On appelle la méthode et on retourne sa valeur
Catch 'La dll/module/méthode n'a pas été trouver, on ne retourne rien
Return Nothing
End Try
End Function
Conclusion
Soyez aimable, je viens de migrer de vb6 a vb.net ya même pas 1 semaine ;)
Je posterai un zip avec un exemple et je vais essayer avec d'autre type de dll quand j'aurai plus de temps.
@+
Historique
- 22 janvier 2006 22:16:13 :
- Ajout d'un exemple concret, de commentaires et de gestion d'erreur
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Pointeur mémoire [ par OBI76 ]
Salut !G un gros problème : pour faire un plugin pour winamp, j'ai été obligé d'utiliser une dll "vblink" reconnue par winamp et qui va dans la ram ch
lire une variable externe à VB [ par igorpastis ]
salutj'ai un petit problemeje fais appel a une fonction externe (une dll) ! jusqu'ici ca marche voila mon appel:Private Declare Function vbmoby_readDE
A l'aide:comment integrer une DLL avec des pointeur [ par marko34 ]
Au secours, je dois utiliser en dotnet une DLL ecrite en C++ et qui bien sur renvoi des pointeurs. J'arrive a l'integrer mais impossible de recuperer
Appel de fonctions dans une DLL externe [ par Danette ]
Bonjour,Je me suis acheter un CD-ROM annuaire téléphonique et il est évident que la base de données des numéro et des adresses est appellée par le pro
Composant qui appelle lui même une autre dll (références projet) [ par TigerFab ]
Bonjour,Voici ma question:Lorsque vous achetez un composant, genre Infragistics, lorsque vous ajoutez de la boîte d'outil un des nombreux composants s
Pointeur d'un tableau à 2 dimensions vers DLL C++ [ par Feanor06 ]
Bonjour, Voilà, j'ai un exe principal en VB.net (VS2008 Express) et une DLL en C++ (Dev-C++). Je dois passer en paramètre à une fonction de la DLL u
Récupérer un pointeur envoyé à une DLL [ par JSilvere ]
Bonjour, Je suis en train de créer un programme utilisant une DLL développée en C++... Cette DLL me sert à me connecter à un automate. J'arrive à co
vb6fr dll est introuvable ? [ par charif591 ]
Salut à tous. J'ai fait un programme avec vb6. On ne peut l'utiliser que dans l'ordinateur où vb6 est installer. comment en peut résoudre ce problèm
insérer d'une référence externe dwg avec macro vba [ par fabdu91630 ]
Bonjour, Je suis novice dans la programmation VBA et j'ai besoin d'aide : J'ai besoin de créer une macro en VBA qui me permettrai de insérer une réf
construire une dll [ par riganemed ]
salut ! pouvez vous m'aidez a reconstruire une dll a partir du fichier ci dessous qui contient le source afin que je me puisse l'ajouter comme référen
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|