Passage d'un tableau de string vers du code non managé (DLL)

Passage d'un tableau de string vers du code non managé (DLL) - C#/.NET managed - Programmation

Marsh Posté le 11-11-2004 à 20:57:14    

Salut tlm.
 
Dans mon code c#, je obligé de faire appel a une fonction contenue dans une DLL. Cette fonction doit retourner un tableau de chaines de caracteres, dont le nombre est à priori inconnu, de meme que la taille des chaines retournées.
 
J'ai de gros problèmes à faire passer un tableau de string c# du code managé au code non managé, et vice-versa.  
Le bout de code suivant fonctionne, mais n'est pas beau et pas pratique du tout.
 

Code :
  1. [System.Runtime.InteropServices.DllImportAttribute("AppInfo.dll" )]
  2. public static extern int GetFileNames([In, Out] string[] buffer,int maxFileNameSize,int maxFileNames);
  3. public string[] GetFileNames()
  4. {
  5. string[] fileNames=new string[MAX_FILES_RETREIVED];
  6. for(int i=0;i<fileNames.Length;i++) fileNames=new string('a',MAX_FILES_LENGTH);
  7. int nbFiles=ScireFunctions.GetFileHandles(fileNames,MAX_FILES_LENGTH,fileNames.Length);
  8. for(int i=nbFiles;i<fileNames.Length;i++) fileNames[i]=null;
  9. return fileNames;
  10. }


 
L'entete de la fonction est le suivant :

Code :
  1. INT GetLocalFiles(TCHAR** fileNames, int maxFileNameSize, int maxFilesNb);


 
Comme vous pouvez le constater, la fonction managée [i]GetFileNames créé un tableau de strings (déjà initialisées et contenant une chaine de caractère de taille maximale autorisée), l'envoie à la fonction Win32 de la DLL, avec en argument le nombre de cases dans le tableau et la taille maximale autortisée pour les chaines. Le retour me donne le nombre de chaines inscrites dans le tableau.
 
L'inconvénient, c'est qu'au retour de la fonction, je doit vider a la main les chaines de caractères présentes mais inutiles (index > index retourné). J'ai un tableau a moitié vide, pas pratique a utiliser.
 
 
 
Ma question est la suivante : existe-t-il une autre solution pour récupérer un tableau de chaines de caractères à partir d'un code non managé ? (je précise que le tableau ner contient des données interessantes qu'au retour de la fonction et non à l'appel)
 
Edit : titre pourri


Message édité par oliv5 le 11-11-2004 à 21:15:25
Reply

Marsh Posté le 11-11-2004 à 20:57:14   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed