DLL VB6 et Pointeur d'Array d'UDTs
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:
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 de la DLL :
Code:
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:
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 |