Demande d'information sur la récupération d'un tableau de strings via le marshal
lj76
Messages postés1Date d'inscriptionmardi 25 janvier 2005StatutMembreDernière intervention25 janvier 2005
-
25 janv. 2005 à 16:15
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
25 janv. 2005 à 17:10
Bonjour,
Je dispose d'une DLL en C contenant la fonction suivante :
void getInfo(const char** ppInfo)
"ppInfo" est un argument de sortie, destiné à me fournir l'adresse de début d'une zone de chaînes de caractères.
Cette zone de chaînes de caractères est représentable de la façon suivante :
"arg1=value1"
"arg2=value2"
"arg3=value3"
"arg4=value4"
""
Chaque chaîne de caractères est terminée par le caractère NULL, et la dernière chaîne de caractères est terminée par deux caractères NULL.
Je souhaite accéder à cette fonction, via une application C#, en utilisant le marshaling.
la portion de code concernée est la suivante :
try
{
IntPtr l_ppInfo = Marshal.AllocHGlobal(4
); //allocation de mémoire pour l'adresse de début de
//zone de chaîne de caractères
getInfo(l_ppInfo); //appel à la DLL
unsafe
{
char c;
//récupération des dix premiers caractères de la zone de chaines de caractères (pour faire simple pour l'instant)
for (
int i = 0; i < 10; i++)
{
c = l__ppInfo[i];
}
}
Marshal.FreeHGlobal(l_ppInfo); //libération de mémoire
}
c
atch(System.Exception e){}
}
Ce code ne fonctionne malheureusement pas et l'affichage des dix premiers caractères de la zone est erroné. Comme j'arrive à les récupérer via une application VC++6, je pense que l'utilisation que je fais du marshaling dans mon application C# est mauvaise.
Quelqu'un aurait-il déjà rencontré ce problème et pourrait donc m'aider et/ou me donner des pistes ?
Merci d'avance.