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 : 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 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
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