dans un fichier C# i ai données de chaîneP/Invoke une fonction passée StringBuilder
class Archiver {
[DllImport("Archiver.dll")]
public static extern void archive(string data, StringBuilder response);
}
est une entrée, et la réponse StringBuilder est où la fonction écrit quelque chose
le prototype de la fonction d'archivage (écrit en C) ressemble à ceci:
void archive(char * dataChr, char * outChr);
et il reçoit une chaîne dans dataChr, et fait alors un
strcpy(outChr,"some big text");
de C# je l'appelle quelque chose comme ceci:
string message = "some text here";
StringBuilder response = new StringBuilder(10000);
Archiver.archive(message,response);
cela fonctionne, mais le problème, comme vous pouvez voir est que je donne une valeur à la taille de StringBuilder, mais la fonction d'archivage peut rendre un (moyen) texte plus grand que la taille que j'ai donnée à mon StringBuilder. Aucun moyen de réparer cela?
Je pensais juste à ce sujet . probablement le meilleur moyen. Bon sang, vous êtes rapides! –
@andrew, vous devriez vraiment envisager de passer la taille de votre tampon dans la fonction d'archivage, cela aidera à prévenir les dépassements de mémoire tampon, l'archive ne doit remplir le tampon que jusqu'à la taille de la mémoire tampon. –