cs_noobs
Messages postés7Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention19 juin 2006
-
6 juin 2006 à 18:06
cs_noobs
Messages postés7Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention19 juin 2006
-
7 juin 2006 à 17:07
Salut!
C'est mon premier post
Bon ma question est la suivante :
J'ai une fonction write_to_file(LPCVOID texte) qui se charge d'ecrire une chaine dans un fichier à l'aide de l'api Writefile(). Quand je l'appelle je le fait sois en lui envoyant la chaine directement entre guillements write_to_file("Valeur :") , sois en lui envoyant un WORD write_to_file( &char).
Jusque là pas de problème.
Seulement voilà, j'aimerais rajouter à cette fonction un petit codage ultra rapide du type texte[i]^=0xAA mais impossible d'interagir avec texte : taille du lpcvoid inconnue !
J'ai essayé de faire des cast (char[]) et (char *) ou *(texte+i) mais ca ne fonctionne pas. Pourtant quand j'appelle strlen() en faisant un cast (const char *) et bien là strlen me retourne bien la bonne taille de texte.
Je me tourne donc vers vous pour vous demander s'il est possible de faire ce que je veux et si oui de quelle manière.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 6 juin 2006 à 18:43
LPCVOID -> déja le C indique que c'est un pointeur constant (impossible de modifier ce sur quoi il pointe)
Pour faire tes opérations, il te faudrait un LPBYTE par exemple
Ta fonction devrait plutot avoir cette forme:
write_to_file(LPBYTE texte, int length)
{
LPBYTE p, end = texte + length;
for(p = texte, p != end; *p++ ^= 0xAA);
WriteFile(...);
// Remet le texte dans son état d'origine
for(p = texte, p != end; *p++ ^= 0xAA);
}
Sinon, tu peux allouer un deuxième buffer, pour éviter de devoir faire le décodage ensuite
cs_noobs
Messages postés7Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention19 juin 2006 6 juin 2006 à 20:00
Salut vecchio,
merci de ton aide.
Alors j'ai bien remplacé les arguments attendus par ma fonction par write_to_file(LPBYTE texte, int length).
Ca ne fonctionnait plus mais en castant l'argument a chaque fois que j'appelle write_to_file() ca refonctionne sans problème : write_to_file((LPBYTE)"Valeur :") et write_to_file((LPBYTE)&char).
Seulement impossible d'appliquer le codage, j'ai bien essayé avec ta ligne for(p = texte, p != end; *p++ ^= 0xAA) que j'ai bien comprise et avec plusieurs autres équivalents mais le programme ne passe étrangement jamais ce cap comme si la boucle était sans fin ?!
Je vais chercher et je tiens tout le monde au courant au cas ou quelqun en ait besoin plus tard. Je te valide ton post une fois le problème intégralement solutionné.
Merci pour l'info sur le C de LPCVOID, j'ai toujours supposé que LP voulait dire long pointer, mais je ne voyais pas ce que pouvais bien vouloir dire le C.
cs_noobs
Messages postés7Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention19 juin 2006 7 juin 2006 à 00:51
Salut,
je n'ai toujours pas trouvé de solution à mon problème.
Par contre quand je place un MessageBox( NULL, texte, "DEBUG", MB_OK) au début de write_to_file( LPBYTE texte), tout fonctionne, si je le précède juste d'une texte[0]='A' ou bien encore d'un strcpy(texte,"A") et bien plus rien ne s'affiche.
Le mystère reste entier, personne n'a d'idée.
Je vous préviens si je trouve.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDernière intervention 7 mars 2012 7 juin 2006 à 10:43
Ah ok.
Et pour l'info, ^= ca fait quoi ? Vive les moteurs de recherche... Ils prennent pas en compte les accents et tout le bordel... (ou alors je ne sais pas m'en servir, ce qui est possible aussi)
cs_noobs
Messages postés7Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention19 juin 2006 7 juin 2006 à 16:38
Salut.
Bon alors merci DMK04, mais comme le dit vecchio, c'est p++ qui correspond ici.
J'arrive vraiment pas à trouver, je suis dans l'impasse pourtant je suis sur que c'est relativement simple mais je découvre Vs et l'api windows.
Je vous ai mis un mini example <> Comme ca vous pourrez vous rendre compte par vous même que ca fonctionne très bien tant qu'on a pas toucher à texte.