Bonjour,
Je développe une DLL en VB6 et j'ai besoin de lui transmettre un pointeur d'Array d'UDTs afin que la DLL me "remplisse" cette Array d'UDTs.
En suivant ce sujet, j'ai réussi à créer une fonction dans ma DLL ayant en argument « ByRef » le pointeur d’un UDT (type Long) et modifiant le contenu des différents « champs » de cet UDT afin que mon exécutable récupère l’UDT « rempli ».
Le problème que je rencontre c’est que je n’arrive pas à créer la même chose en remplaçant ce pointeur d’UDT par un pointeur d’Array d’UDTs.
J'ai essayé deux trois modifications pour travailler avec des Array, mais mon application plante sans me fournir d'explications. Du coup c'est pas forcément simple à investiguer et je ne trouve quasiment rien sur le sujet. Donc quelqu’un aurait-il la solution ? é_è
Exemple du code fonctionnel pour une transmission d’un simple UDT (via pointeur) :
Code de l’exécutable appelant la DLL :
Code de la DLL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Declare Function ListerTest Lib « D:\Path\Test.dll » (ByRef lptr_Test As Long) Public Function GetTestTypeFromPtr(ByVal Ptr As Long) As UDT CopyBytes LenB(GetTestTypeFromPtr), VarPtr(GetTestTypeFromPtr), Ptr End Function Private Sub ButtonTest_Click() Dim test As TestType ListerTest (VarPtr(test)) test = GetTestTypeFromPtr (VarPtr(test)) End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Declare Sub CopyBytes Lib "msvbvm60.dll" Alias "__vbaCopyBytes" (ByVal ByteLen As Long, ByVal Destination As Long, ByVal Source As Long) Function SetTestTypeToPtr (ByRef Ptr As Long, ByRef data As TestType) CopyBytes LenB(data), Ptr, VarPtr(data) End Function Public Function ListerTest (ByRef lptr_Test As Long) Dim test As TestType With test .id = 1 .max = 10 .min = 0 .name = Test X .nbKO = 1 End With SetTestTypeToPtr lptr_Test, test End Function
Définition de l’UDT (présente dans la DLL et l’exécutable)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Type TestType id As Integer name As String * 100 min As Double max As Double nbKO As Integer End Type
Partager