2016-08-09 1 views
0

Je souhaite créer une classe de wrapper C# avec les fonctions mcp23017.c dans la bibliothèque C WiringPi. J'ai pris ce C# WiringPi existant WrapperClass pour les autres fonctions. Je veux étendre cette classe wrapper pour utiliser les fonctions de mcp23017. J'ai essayé de créer une nouvelle classe avec une fonction dans le wrapper:Classe de wrapper C# pour la bibliothèque C

public class mcp23017 
{ 

    [DllImport("libmcp23017.so", EntryPoint = "myPinMode")] 
    public static extern void myPinMode(struct wiringPiNodeStruct *node,Int32 pin, Int32 mode); 

} 

Mais j'obtiens ces erreurs pour l'élément struct.

) expected. 
; expected. 
{ expected. 
} expected. 
Invalid token "*" in class struct or interface member declaration 

Dois-je définir une structure dans la classe wrapper? Comment ça marche? Pas familier avec ceci que je suis nouveau à l'aide de C#.

Répondre

0

L'utilisation de struct sur un paramètre en C# n'est pas valide. Le marshaller devrait prendre soin de ce comportement pour vous. Peut-être que vous vouliez dire quelque chose comme ça.

[StructLayout(LayoutKind.Sequential)] 
public struct WiringNode 
{ 
    //Struct members here 
} 

[DllImport("libmcp23017.so", EntryPoint = "myPinMode")] 
public static extern void myPinMode(ref WiringNode node, Int32 pin, Int32 mode); 

alors appelé comme:

var myStruct = new WiringStruct(); 
//Set struct members 

myPinMode(ref myStruct, whatever, whatever); 
+0

Mais je veux utiliser le wiringPiNodeStruct' 'struct défini dans la bibliothèque C dans le fichier wiringPi.h (lien: WiringPI). Puis-je référencer la structure dans la classe Wrapper? –

+0

Pas directement. Vous devrez recréer la structure du côté .net, puis laisser la gestion de la conversion convertir la mémoire entre .net et c –

+0

OK. Des exemples ou des références sur comment cela peut-il être fait? Ou tout autre moyen d'utiliser les fonctions de la bibliothèque C sans créer de classe wrapper? –