Bonjour à tous,
Je doit en ce moment utiliser une bibliothèque développée en C, mais mon projet principal est en C++. Je souhaiterais donc faire un petit wrapper C++ de cette bibliothèque et je m'interroge sur la meilleure manière de faire.

Elle se nomme libParse et je l'obtiens sous la forme d'un répertoire contenant un paquet de header et de fichiers sources. J'ai donc tous les choix possibles, modifier les sources, en faire une dll, en faire une lib statique, l'intégrer directement dans mon projet etc.

Dans un premier temps, j'ai naivement tenté de créer un projet C++ organisé comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Projet libParseWrapper 
  rep C
     rep header // header de libParse en C
     rep source // source de libParse en C
  rep header // header de mon wrapper CPP
  rep source // source de mon wrapper CPP
Car après tout le C++ est rétro-compatible avec le C, right ? (indice : ahahahah)
J'ai compilé et ...
Malheureusement, le code C est saturé de chose de ce genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void addTag (char * dst, char * tagname) ; // déclaration
//...
 
unsigned char buffer [64];
//...
 
addTag (buffer , "tag");
qui compile sans problème avec VC2005 en mode C (option "Compile as C code"). Par contre en mode C++, la sanction est immédiate :
cannot convert parameter 1 from 'unsigned char [64]' to 'char *'
Alors bien sur, je peux supprimer l'erreur en écrivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
addTag ((char*)buffer, "tag");
Mais le problème, c'est qu'il y a plusieurs centaines d'erreurs du même tonneau éparpillées dans le code

Je n'ai pas trouvé le moyen de désactiver ce genre d'erreur en C++, rajouter des centaines de cast risque de prendre un temps fou et j'ai un peu peur de me lancer dans une solution à base de dll....
Quelle est selon vous la meilleure manière de faire ?