Passer string de c vers VB6

fbogus07 Messages postés 10 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 6 juillet 2006 - 26 juin 2006 à 12:20
fbogus07 Messages postés 10 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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.

Merci d'avance

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 juin 2006 à 13:43
VB6 utilise des BSTRING.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 1
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.

[;)] Flachy Joe [;)]
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 juin 2006 à 06:18
ATTENTION.... !


le passage de String se fait en Byval !

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
fbogus07 Messages postés 10 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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.
0
Rejoignez-nous