juin
2007
Nous avons vu dans les précédents billets comment récupérer une strucuture native dans du code C#.
Maintenant nous allons voir comment utiliser une dll pour mettre à jour une structure native préalablement construite en C#.
Soit la structure C suivante :
int age;
int taille;
} MASTRUCTURE;
et la fonction suivante qui ajoute 1 :
{
s->age++;
s->taille++;
}
L’équivalent C# est :
public class MaStructCSharp
{
public int age;
public int taille;
}
Et la déclaration DllImport :
public static extern void Inc(IntPtr s);
Nous allons donc instancier depuis C# une nouvelle structure C# :
s.age = 27;
s.taille = 185;
Le but maintenant est d’obtenir un pointeur natif sur cette structure C#, commencons par allouer une zone mémoire native de la taille de la structure :
IntPtr sI = Marshal.AllocHGlobal(Marshal.SizeOf(s));
Puis on va convertir la structure managée en pointeur natif :
Marshal.StructureToPtr(s, sI, true);
Il ne nous reste plus qu’à appeler la méthode d’incrémentation et à re-convertir le résultat dans notre structure C# :
Marshal.PtrToStructure(sI, s);
Console.WriteLine(s.age);
Console.WriteLine(s.taille);
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