IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

classe à wrapper..


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Par défaut classe à wrapper..
    Salut!
    Je souhaiterai wrapper une classe d'une librairie C++ dont je dispose pour pouvoir l'utiliser dans un programme en C#.
    J'ai essayé de wrapper cette classe, mais j'ai plein d'erreurs....
    Voila ma classe en C++, c'est:
    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
    class VRPN_API vrpn_Analog_Remote: public vrpn_Analog {
        public:
            vrpn_Analog_Remote (const char * name, vrpn_Connection * c = NULL );
     
            virtual void mainloop();
     
            virtual int register_change_handler(void *userdata,
    		vrpn_ANALOGCHANGEHANDLER handler) {
    	  return d_callback_list.register_handler(userdata, handler);
    	};
            virtual int unregister_change_handler(void *userdata,
    		vrpn_ANALOGCHANGEHANDLER handler) {
    	  return d_callback_list.unregister_handler(userdata, handler);
    	}
     
        protected:
            vrpn_Callback_List<vrpn_ANALOGCB> d_callback_list;
     
            static int VRPN_CALLBACK handle_change_message(void *userdata, vrpn_HANDLERPARAM p);
    };
    j'ai tenté de wrapper ça comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            [DllImport("vrpndll.dll")]
            extern class  vrpn_Analog_Remote:  vrpn_Analog {
        public vrpn_Analog_Remote (char name, vrpn_Connection c = null );
     
        public   virtual void mainloop();
     
          public  virtual int register_change_handler( userdata,
    		vrpn_ANALOGCHANGEHANDLER handler) {
    	  return d_callback_list.register_handler(userdata, handler);
    	};
            virtual int unregister_change_handler( userdata,
    		vrpn_ANALOGCHANGEHANDLER handler) {
    	  return d_callback_list.unregister_handler(userdata, handler);
    	}
    mais bon apparement c'est pas ça!...

    bon peut etre quelqu'un pourrait-il me donner la correction?
    merci!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Salut,

    le soucis ne viendrait-il pas que les pointeurs ne sont pas utilisés en C# ?...

    Si tu veux les conserver, il faut que tu mettes le mot clé 'unsafe' devant tes fonctions et que dans les propriétés de compilation tu autorises les blocs de code unsafe...

    j'espère que ça va t'aider...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Moi, j'ai déjà eu à utiliser une librairie C++ en C#
    mais le constructeur me fournissait une classe C# qui implémentait la librairie C++

    Si tu veux, pour toi ça donnerait un truc dans ce genre :

    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
     
     
    class  Cvrpn_Analog_Remote
    {
        // Redéfinition des méthodes de la classe à partir des fonctions de la dll
     
        unsafe public vrpn_Analog_Remote (char  name, vrpn_Connection  c = NULL)
        {
            vrpn_Analog_Remote (&name, &c);
        }
     
        unsafe public virtual int register_change_handler(void *userdata, vrpn_ANALOGCHANGEHANDLER handler)
        {
            return register_change_handler(&userdata, handler);
        }
     
        unsafe public virtual int unregister_change_handler(void *userdata,
    		vrpn_ANALOGCHANGEHANDLER handler);
        {
            return unregister_change_handler(&userdata, handler);
        }
     
     
        // Importation des fonctions de la dll
     
        [DllImport("applicom.dll")] unsafe public extern vrpn_Analog_Remote (const char * name, vrpn_Connection * c = NULL);
     
        [DllImport("applicom.dll")] public extern virtual void mainloop();
     
        [DllImport("applicom.dll")] unsafe public extern virtual int register_change_handler(void *userdata, vrpn_ANALOGCHANGEHANDLER handler);
     
        [DllImport("applicom.dll")] unsafe public extern virtual int unregister_change_handler(void *userdata,
    		vrpn_ANALOGCHANGEHANDLER handler);
    }
    voilà,
    ça doit ressembler à qqch comme ça...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Par défaut
    ok merci Medleb! je vais essayer avec ça

Discussions similaires

  1. auto-boxing/unboxing sur une classe wrapper personnelle
    Par tamar_a_roulettes dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2011, 10h18
  2. Réponses: 0
    Dernier message: 28/07/2010, 14h20
  3. Bug dans un wrapper de la classe STL set
    Par sphere369 dans le forum Débuter
    Réponses: 6
    Dernier message: 17/07/2009, 15h18
  4. persistence d'une wrapper class
    Par revever dans le forum JPA
    Réponses: 2
    Dernier message: 23/04/2008, 10h17
  5. [C# 3.0] classe wrapper et instantiation
    Par maa dans le forum C#
    Réponses: 1
    Dernier message: 26/11/2007, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo