11
mars
2008
mars
2008
C# // C++ Interop
[C++ Interop] Marshaling d’un tableau de wchar_t
Un article de nico-pyright(c)
Pas de commentaires
Suite à une question, voici un exmple pour passer un tableau de wchar_t d’une DLL C à une application managée (C# par exemple).
Soit une dll C qui expose une méthode qui alloue et initialise un wchar_t ** :
#include <stdio.h>
extern "C" __declspec(dllexport) void demo(wchar_t ** &tab)
{
#define SIZE 10
tab = new wchar_t* [SIZE];
for (int i = 0; i < SIZE ; i++)
{
tab[i] = new wchar_t[20];
swprintf(tab[i], L"chaine : %i", i);
}
}
extern "C" __declspec(dllexport) void demo(wchar_t ** &tab)
{
#define SIZE 10
tab = new wchar_t* [SIZE];
for (int i = 0; i < SIZE ; i++)
{
tab[i] = new wchar_t[20];
swprintf(tab[i], L"chaine : %i", i);
}
}
et le code C# pour récupérer le tableau de chaine :
[DllImport("demoWchar.dll")]
public static extern void demo(out IntPtr buff);
static void Main()
{
IntPtr test;
demo(out test);
int tailleTableau = 10;
IntPtr[] tabPointeur = new IntPtr[tailleTableau];
Marshal.Copy(test, tabPointeur, 0, tailleTableau);
for (int i = 0; i < tailleTableau; i++)
Console.WriteLine(Marshal.PtrToStringUni(tabPointeur[i]));
}
public static extern void demo(out IntPtr buff);
static void Main()
{
IntPtr test;
demo(out test);
int tailleTableau = 10;
IntPtr[] tabPointeur = new IntPtr[tailleTableau];
Marshal.Copy(test, tabPointeur, 0, tailleTableau);
for (int i = 0; i < tailleTableau; i++)
Console.WriteLine(Marshal.PtrToStringUni(tabPointeur[i]));
}
La taille d’un tableau est toujours problèmatique.
Ici elle est fixée en dur, mais en général, c’est une donnée qui transite également dans les paramètres.
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007