cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 2013
-
3 juin 2009 à 09:49
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 2013
-
9 juin 2009 à 13:50
Bonjour à tous
Voila j'aurais aimé avoir votre avis d'expert sur cete opération.
Je veux passer un tableau complet de strings à une DLL standard, que je réalise avec un language qui n'est ni VB ni C.
Cela fonctionne correctement, mais je suis obligé de passer par un tableau de pointeur dans lequel je depose chaque adresse de chaque string du tableau.
J'aimerais juste savoir si quelqu'un aurait une autre méthode.
Voici donc le code qui fonctionne :
Dim TabloString(3) as String
X = 0X X + 1: TabloString(X) "Coucou"X X + 1: TabloString(X) "Je suis un "X X + 1: TabloString(X) "tableau de string"
Dim TabloPointeur() As Long
ReDim TabloPointeur(0 To X) As Long
TabloPointeur(0) = X
For i = 1 To X
TabloPointeur(i) = StrPtr(TabloString(i))
Next
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 8 juin 2009 à 16:48
Aaaahh, je croyais que tu faisait du C.....
Il m'avait semblé voir un morceau de code que tu m'avais donné en une explication des SaffeArray en C au debut du POST c'est pour ça, que y'a eu confuse :-))
Oui tu as toujours raison......j'ai modifié ma DLL pour qu'elle lise bit a bit.
Et j'ai donc un caractere, un 0, un caractere, un 0
Alors j'ai poussé pour qu'il ne s'arrette pas au zero et la il me lis des choses tres confidentielles sur sa vie privées que je n'ose te repeter :-))))
Donc c'est la que doit intervenir la longueur de la str dans la BSTR je suppose, pour eviter de lire trop loin :-)
Si ton idée est jouable aussi et bien plus simple, c'est encore une alternative.
Mais en fait ce code n'est que le debut, pour cette fois c'est dans une lisbox, mais je voudrais faire pareil pour l'utiliser sur autre choses etc.
Tu va me dire, que je pourrais recreer le tableau en passant ligne a ligne et en l'enregistrant dans la DLL....mais c'est un peu comme la combine de la string et split...c'est pas bien top top.....et tu sais plus on est nul comme moi......et plus on est difficile :-)))
Encore une fois, si j'ai pas d'autre solution, je pourrais faire comme ça....
Mais ça avance, et j'trouve ça super cool :-)
Mais pourquoi y met ces chr(0) apres chaque lettre VB ???
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 8 juin 2009 à 17:15
Bon je viens de m'appercevoir d'un truc !!!
Apparement non seulement il met un 0 entre chaque caractere et je ne sais pas pourquoi.
Mais apparement il termine ses enregistrements par au moins de 0 de suite.
Donc je suis arrivé a reperer dans la DLL la fin de chaque enregistrement grace à ça.
reste à voir ce que tu aurais avec une chaîne composée de caractères chrW(n>255) = une chaîne unicode ;)
voir STRCONV dans ce cas, et l'équivalent en PB évidemment
ps : je ne comprends toujours pas pourquoi tu ne passes pas par le pointeur du tableau string!
cf l'exemple vb que tu as validé
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 8 juin 2009 à 17:32
oups je réponds à la moitié....
Qu'est ce que t'en pense ???
que si le dev VB doit (pour une raison quelconque) passer des chr(0) dans son tableau, cela peut causer des soucis...
(reste toujours instrrev tu me diras mais il doit bien y avoir des cas particuliers )
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 8 juin 2009 à 17:44
je ne comprends toujours pas pourquoi tu ne passes pas par le pointeur du tableau string!
cf l'exemple vb que tu as validé
Bah en fait par ce que ça plante, que je mette VarPtr ou StrPtr
J'ai validé la solution parce qu'elle etait bonne pour VB
Mais celle qui marche pour PB c'est celle que j'ai mis apres
Y'aurais donc encore une histoire d'UNICODE
D'ailleur comment on fait pour savoir si une variable est en UNICAODE ou ANSI ???
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 9 juin 2009 à 08:12
Bon me revoilou :-)
Nickel ton API, ça me donne que mon tableau n'est pas UNICODE.
Alors pourquoi je me retrouve avec ces chr(0) qui complete comme tu me l'a expliqué???
J'y comprend rien. :-(
Pense tu que ce code modifié donne bien le pointeur de la STR de la BSTR ???
Function PointerFromBSTR(ByVal pointer As Long) As Long
Dim temp As String, Longueur As String
' copy the pointer into the temporary string's BSTR
CopyMemory ByVal VarPtr(temp), pointer, 4
' now Temp points to the original string, so we can copy it
PointerFromBSTR = StrPtr(temp)
' manually clear then temporary string to avoid GPFs
CopyMemory ByVal VarPtr(temp), 0&, 4
End Function
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 9 juin 2009 à 13:50
Merci pour cet exemple de fonctionnement de cette API
Bon bah tanpis, je laisse tombé l'envoi de STR par VB, je crois que c'est une galere, en plus j'sais meme pas si c'est possible.
Y'a surement toujours ces caracteres 0 qui se trimbale, et c'est un peu trop dur pour moi.
Je vais donc laisser la convertion dans la DLL
Je ferais un test pour voir si c'est du BSTR ou pas et j'agirais en consequence :-)