fbogus07
Messages postés10Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006
-
26 juin 2006 à 12:20
fbogus07
Messages postés10Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006
-
27 juin 2006 à 08:53
Bonjour a tous,
Je suis actuellement en train de developper un petit programme d'annuaire. Pour cela j'ai cree une DLL en C, puis une interface graphique en VB6.
Le probleme est que ce programme fonctionne tres bien avec des chiffres mais pas avec des chaines de caracteres.
Je voulais donc savoir comment transmettre un tableau de caractere depuis une fonction C vers mon application VB6?
J'ai entendu parler d'un passage par argument mais je reste un peu bloque.
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 26 juin 2006 à 18:42
Le plus sur (??) est d'envoyer l'adresse de la chaine dans un long, ensuite dans vb tu utilise l'api copymemory pour copier dans une chaine.
Sinon le passage de la chaine fonctionne d'habitude.
expl:
void mafonc (char* (ou void* ou long ou ce_que_tu_veut*) ptrChaine)
{
ptrChaine = (char*)malloc(256);
ptrChaine[1] = 'a';
}
en vb
public declare sub MaFonc lib "machin" (byref strRetour as string)
ou
public declare sub MaFonc2 lib "machin" (byval ptrRetour as long)
dans ce cas tu recupere l'adresse mémoire.
L'utilisation du Byref equivaut à l'utilisation d'un pointeur en C/C++ : tu indique que la variable doit 'pointer' vers l'adresse mémoire et non prendre la valeur qui ce trouve à cette adresse.
Au contraire, le byval quand tu passe un pointeur indique qu'il faut prendre la valeur passée, donc la valeur du pointeur et non celle vers laquelle il pointe.
fbogus07
Messages postés10Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006 27 juin 2006 à 08:53
Merci beaucoup pour ces precisions. J'ai essaye, et...
Ca marche maintenant!!
Donc pour les futurs, passage par arguments est redoutable, mais un peu embetant.
Sinon il y a une solution qui consiste a passer par les structures. Je ne sais pas pourquoi, mais en declarant une structure en vb identique a celle en c, avec les meme tailles memoire pour les string de vb et mes tableaux de caracteres en c, le passage d'une structure entiere ne pose aucun pb, et par consequent les tableaux qui la composent passent aussi.