Pointeur

kinouseba Messages postés 34 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 8 juillet 2009 - 29 juin 2005 à 13:21
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 29 juin 2005 à 20:48
Bonjour,
je dois utiliser une dll dans laquelle il y a cette fonction:
char* initialize(int)

Comment faire en VB pour pouvoir récupérer correctement la chaine de caractères, vu que je reçoie un pointeur?
Au niveau de la déclaration, je ne sais pas trop quoi mettre:
moi, j'ai mis:
declare function initialise lib"....." (byval(....)) as string

Merci de votre aide

3 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
29 juin 2005 à 14:07
Salut,
Un pointeur ? dans ce cas, j'aurais plutôt pensé à un byref.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
29 juin 2005 à 19:30
Normalement, un pointeur se traduit par un Long transmis ByRef en VB. En effet, un pointeur n'est rien d'autre qu'une adresse mémoire, donc c'est un long, et on le colle ByRef pour en avoir le retour dans l'appelant. Il faut ensuite utiliser les API pour lire la mémoire à l'adresse pointé.
Mais comme en VB, le nom d'une string ne cache rien d'autre qu'un pointeur sur un tableau de char, une string byref devrait le faire dans ton cas.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
29 juin 2005 à 20:48
tu passes un pointeur en Long en Byref

ce qui récupère l'adresse de ta chaîne

ensuite tu la copie avec un Buffer suffisamment grand



Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long



Private Function CopieChaine(ByVal adresse As Long) As String

Dim ret As String

If adresse > 0 Then

ret = Space(256)

lstrcpy ret, adresse

ret = Trim(ret)


If ret <> "" Then CopieChaine = left(ret, Len(ret) - 1)

End If

End Function

Daniel
0
Rejoignez-nous