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