1
février
2008
				
				[C++/CLI] Intéropérabilité de structure
				
					
					février
2008
Je viens de mettre à jour mon tutoriel sur l’intéropérabilité où j’expose une manière plus simple de mettre à jour une structure C native par référence depuis un programme C#.
soit la structure C suivante
typedef struct {  
int age;
int taille;
} MASTRUCTURE;
int age;
int taille;
} MASTRUCTURE;
et la méthode suivante qui incrémente une structure passée en paramètre :
extern "C" __declspec(dllexport) void Inc(MASTRUCTURE * s)  
{
s->age++;
s->taille++;
}
{
s->age++;
s->taille++;
}
On peut utiliser les méthodes PtrToStructure et StructureToPtr pour faire l’intéropérabilité, mais on peut également utiliser une méthode très simple en déclarant notre structure avec le mot clé struct :
[StructLayout(LayoutKind.Sequential)] 
public struct MaStructCSharp
{
public int age;
public int taille;
}
public struct MaStructCSharp
{
public int age;
public int taille;
}
Et si on déclare le DllImport avec une référence :
[DllImport("libCStruct.dll")] 
public static extern void Inc(ref MaStructCSharp s);
public static extern void Inc(ref MaStructCSharp s);
On pourra faire l’implémentation de notre code C# ainsi :
MaStructCSharp s = new MaStructCSharp(); 
s.age = 27;
s.taille = 185;
Inc(ref s);
Console.WriteLine(s.age);
Console.WriteLine(s.taille);
s.age = 27;
s.taille = 185;
Inc(ref s);
Console.WriteLine(s.age);
Console.WriteLine(s.taille);
Voilà
J’en profite pour remercier Mike pour ses remarques constructives sur mon article ![]()
Commentaires récents
- dans [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
 
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
 

 Un article de nico-pyright(c)