Vijbam
Messages postés5Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention 9 janvier 2012
-
7 janv. 2012 à 13:53
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
11 janv. 2012 à 07:14
J'ai besoin de faire passer (dans les deux sens) une variable de type utilisateur vers une fonction DLL. En cherchant du VBFrance, j'ai trouvé la source 6826 de Bertrand P, que j'ai modifiée à ma problématique. Si je peux recevoir de la DLL à l'EXE, je ne peux pas envoyer de l'EXE vers la DLL : je tombe sur l'erreur "type d'argument ByRef incompatible" ! D'où vient l'erreur ?
code:
'Exemple de transfert et récupération
'Fait le 20 avril 2003 par Bertrand P.
'Source VBFrance 6826
Private Sub Form_Load()
'Ne pas oublier la référence de la dll dans le projet
Set DLL = New clsTab
End Sub
Private Sub cmdEnvoi_Click()
Dim ClientJMD As Client
ClientJMD.Nom = "DUPOND"
ClientJMD.Prenom = "Jean-Michel"
DLL.DLL_Recep ClientJMD
End Sub
Private Sub cmdRecept_Click()
Dim ListeClient() As Client
Dim i As Integer
ListeClient() = DLL.DLL_Envoi()
'***
lstClients.Clear
For i = 0 To UBound(ListeClient)
lstClients.AddItem ListeClient(i).Prenom & " " & ListeClient(i).Nom
Next i
End Sub
Public Type Client
Nom As String
Prenom As String
End Type
Public Sub DLL_Recep(Clt As Client)
TransfertTab.Show
'***
TransfertTab.lstClients.Clear
TransfertTab.lstClients.AddItem Clt.Nom & " " & Clt.Prenom
End Sub
Public Function DLL_Envoi() As Client()
Dim ListeClient(0 To 3) As Client
Dim b As Byte
For b = 0 To 3
ListeClient(b).Nom = Choose(b + 1, "DUPONT", "DURAND", "SCHMIDT", "DOE")
ListeClient(b).Prenom = Choose(b + 1, "Jean", "Michel", "Catherine", "John")
Next b
DLL_Envoi = ListeClient
End Function
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 9 janv. 2012 à 08:08
Ah, et,
si tu veux que ton code tel quel fonctionne, supprime la déclaration de Type Client de ton Module...
même nom, même déclaration, mais pour VB, ce sont sinon deux types différents (entre ton projet1 et ta dll). Tu ne peux du coup pas utiliser ByRef sur ces Types différents...
Vijbam
Messages postés5Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention 9 janvier 2012 9 janv. 2012 à 11:16
Exact, je fais des essais de DLLs.
J'ai juste besoin d'envoyer des infos à la DLL.
Plutôt que de passer 36 paramètres (sub XXX (p1,p2,p3,...), j'ai pensé qu'une variable de type perso contenant tous les paramètres d'un seul coup serait plus simple.
Je viens de supprimer la déclaration Client du module ... et ça marche !
... Mais je ne comprend pas pourquoi !!! (malgré l'«Option Explicit» !)
Merci à toi, Renfield !
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 9 janv. 2012 à 11:22
L'option Explicit ne règle pas le problème dont t'a parlé RenField.
Son rôle se limite à la vérification de la déclaration effective d'une variable utilisée.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
Vijbam
Messages postés5Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention 9 janvier 2012 9 janv. 2012 à 12:16
Tout compte fait ... non ça ne marche pas !!!
En transposant dans mon vrai projet ... "Type défini par l'utilisateur non défini" !!! J'explique donc un peu plus mon vrai projet (le code ci-dessus n'était qu'un essai).
J'ai créé pour mes élèves plusieurs EXEs d'exercices. Je souhaite les regrouper non pas en un seul EXE, mais utiliser un lanceur (EXE) et des PlugIns (Gally - source 32875) plus rapides que de lancer ShellExecute ...
Je me plonge donc dans le monde des DLLs !!!
J'ai regroupé ces Exercices-PlugIns dans des dossiers différents, le lanceur étant à la racine. Les DLLs ne sont pas avec l'EXE !
Si beaucoup de Plug-Ins sont simples de facture, là, je dois faire passer une variable de type perso (expliqué plus haut) à une DLL.
Je suis un amateur (qui commence tout de même à bien manier les fonctions simples de VB6), peut-être je veux faire trop compliqué !
Tu devrait :
- faire de ton exe central un Exe ActiveX
- lui faire partager on type perso et autres droleries (Interface, si tu utilises ma source, etc.)
- Chaque plugin lorgnerait dessus et pourrais utiliser le type perso, etc.
contactes moi directement si tu souhaites de l'aide