cs_welc
Messages postés14Date d'inscriptionvendredi 2 novembre 2001StatutMembreDernière intervention19 novembre 2003
-
17 nov. 2003 à 22:26
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008
-
25 avril 2008 à 12:31
Hello,
Suite à mon dernier messge, j'ai enfin trouvé tous seule la solution à mon probléme.
Je dis bug, mais je suis loin d'avoir le niveau de juger si c'est un bug ou pas.
Dans tous les cas j'expose mon probléme avec la solution, au cas ou d'autre personne on le même prob.
-----
Quand vous faite appel à des API windows, il arrive que certaine fonction, dans leur argument renvoit une adresse dune chaîne de caractére codé sur un octet (jme tompe ?). Par exemple :
SHGetPathFromIDList de l'api windows.
Donc si c'est codé sur un octet, déclarons un tableau de byte. Ici l'api SHGetPathFromIDList nous indique que le talbeau renvoyé sera de 260 entités.
byte[] MaChaine = new byte[260]
Une fois les donnés récupéré, dans MaChaine[], vous allez vouloir surement convertir en String :
Si vous faite par exemple afficher le contenu de la string dans une TextBox, ce la marche parfaitement.
Si vous essayé de l'afficher en console cela marche super aussi :
// On va dire que MaChaine = "c:\toto"
// Convertie en String, cela donne logiquement MaString="c:\toto"
WriteLine(MaString);
Cela renvoit chez moi :
c:\totoLe programme '[3720] UnProg.exe' s'est arrêté avec le code 0 (0x0).
Super cool, ça marche bien tous ça !
Et pourtant si vous faite MaString.Length, cela donne 260.
String.Length = "Nombre de caractères dans cette instance."
Vous me direz, car la fin est remplit d'espace, mais mon exemple de sortie en console montre bien le contraire.
En faite c'est les foutu caractéres "null" qui était dans le byte qui mette la chianlit.
Pour remédier à cela, il faut convertire ainsi :
String MaString = System.Text.Encoding.Default.GetString(MaChaine)..TrimEnd((char)0);