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++/CLI Discussion :

Utilisation d'une classe C++ dans une classe C#


Sujet :

C++/CLI

  1. #1
    Membre �clair� Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par d�faut Utilisation d'une classe C++ dans une classe C#
    Bonjour,

    J'ai besoin d'utiliser une classe r�alis� en C++ dans un programme C#. Cette classe se trouvant dans une biblioth�que.
    Je pense faire un wrapper entre cette classe C++ et mon aplication en C#. Je pense utilis� une classe cod� en C++/CLI qui fait l'interface entre le C++ natif et le C#
    Est ce que c'est une sage d�cision ? O� y a t il une solution plus simple et performante ?

    L'id�e que j'ai, c'est qu'� travers la classe C++/CLI faire une conversion de donn�e de l'un vers l'autre.

    Voici le code de ma classe C++ native

    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
    35
    36
    37
    38
     
     
    namespace App
    {
     
    class Tart
    {
    public:
     
        DLLEXP Tart ();
     
        DLLEXP Tart (const std::string& path) { read(path); }
     
        DLLEXP Tart (std::ifstream& ifs);
     
        DLLEXP Tart (const SvmDlibWrapper& orig);
     
        DLLEXP Tart& operator=(const Tart& orig);
     
        DLLEXP void save(const std::vector<std::vector<float> >& vectors, const std::vector<float> labels);
     
        DLLEXP void scorePerClass(const std::vector<float>& v, std::vector<std::pair<double, float>>* scores) const;
     
        DLLEXP double load(const std::vector<float>& v) const;
     
        DLLEXP void read(std::istream& is);
     
        DLLEXP void read(const std::string& path) { Readable::read(path); }
     
        DLLEXP void write(std::ostream& os) const;
     
        DLLEXP void write(const std::string& path) { Writable::write(path); }
     
     
     
    };
     
    }
    Voici le code pour ma classe C++/CLI

    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
     
     
    namespace App
    {
     
    class wTart
    {
    public:
     
        DLLEXP wTart();
     
        DLLEXP wTart (const std::string& path) { read(path); }
     
        //DLLEXP Tart& operator=(const Tart& orig);
     
        DLLEXP void save(const std::vector<std::vector<float> >& v, const std::vector<float> labels);
     
        DLLEXP void scorePerClass(const std::vector<float>& v, std::vector<std::pair<double, float>>* scores) ;
     
        DLLEXP double load(const std::vector<float>& v);
     
        DLLEXP void read(String^ path) ;
     
        DLLEXP void write(String^ path);
     
    private :
        app::Tart objTart;
    };
    }

    Comment puis je convertir le format de donn�e des types suivant :
    • const std::vector<std::vector<float> >
    • const std::vector<float>
    • std::vector<std::pair<double, float>>*


    Je vous remercie pour votre aide

  2. #2
    Membre �m�rite
    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par d�faut
    Bonjour,

    Citation Envoy� par Masmeta Voir le message

    Comment puis je convertir le format de donn�e des types suivant :
    • const std::vector<std::vector<float> >
    • const std::vector<float>
    • std::vector<std::pair<double, float>>*

    Je pense que tu prends le probl�me dans le mauvais sens : Quelle est l'interface que tu voudrais en CSharp?

    Apr�s, tu trouveras comment bricoler pour appeler la classe C++ (tu convertiras tes objets CSharp en C++ et vis versa dans la classe d'adaptation C++ : dotnetToVectorOfVector/vectorOfVectorToDotnet...)

    Est ce que c'est une sage d�cision ? O� y a t il une solution plus simple et performante ?
    On a renonc� � cette approche sur du code assez facile � porter. Si ta classe fait justedes lectures/�critures, il y a des chances pour que �a soit plus simple de le refaire en CSharp que de faire le binding C++/CLI.

    De m�moire, on a eu des probl�mes de d�ploiement (choix des versions DOTNET, n�cessit� d'installer les redistribuables visual studio, etc.)

    Apr�s, nous n'avons pas test� les performances, mais je ne vois pas comment on peut se d�barrasser des conversions dans tous les sens...

Discussions similaires

  1. R�ponses: 3
    Dernier message: 02/04/2013, 09h31
  2. R�ponses: 8
    Dernier message: 05/04/2011, 08h06
  3. R�ponses: 6
    Dernier message: 13/11/2009, 16h06
  4. R�ponses: 4
    Dernier message: 16/05/2006, 23h15
  5. R�ponses: 11
    Dernier message: 06/12/2005, 08h23

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