Bonjour,
Je tente de faire du P/Invoke à partir d'une DLL écrite en C.
Le but est d'implémenter, dans une application C#, un protocole de messagerie sécurisé (déjà utilisé sur nos calculateurs Vax).
La méthode posant problème (j'ai le même soucis sur les autres méthodes de la DLL) a pour but de retourner : la liste des projets, et le nombre de projets définis sur le système (en lisant les infos écrites dans un fichier XML).
Voilà la méthode que j'ai écrite dans mon application C# appelant la méthode IPSec_ListProjet:
Et voici le prototype C fournit avec la DLL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 using System; using System.Runtime.InteropServices; namespace PInvokeTest { class PlatformInvokeTest { [DllImport("IPSecureClt.dll", EntryPoint = "IPSec_ListProjet")] public static extern int IPSec_ListProjet( [In][Out][MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPTStr)] ref string[] cListeProjets, int lNbElement, [In][Out]ref int lNbProjets ); static void Main(string[] args) { const int NbElement = 10; string[] Projet = new string[NbElement]; int NbProjet = 0; int ret = IPSec_ListProjet(ref Projet, NbElement, ref NbProjet); Console.WriteLine("Retour appel fonction : {0}", ret); for (int i = 0; i < NbProjet; i++) { if (Projet[i].Length > 0) { Console.WriteLine("Projet {0} sur {1} : {2}", i + 1, NbProjet, Projet[i]); } } Console.ReadLine(); } } }
La méthode IPSec_ListProjet me retourne une erreur comme ci elle n'arrivait pas à ouvrir ou décoder le fichier XML.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 long IPSec_ListProjet (char cListeProjets[][256+1], const unsigned long lNbElement, unsigned long *lNbProjets);
Du coup, ma liste de projets est vide alors que mon fichier XML en contient un.
Si l'application implémentant le protocole de messagerie est écrite en C, cela fonctionne parfaitement.
Je pense donc avoir un problème dans le marshalling.
Pourriez-vous m'aider ?
Cordialement,
Erwan
Partager