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 :
Car après tout le C++ est rétro-compatible avec le C, right ? (indice : ahahahah)
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
J'ai compilé et ...
Malheureusement, le code C est saturé de chose de ce genre :
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 :
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");
Alors bien sur, je peux supprimer l'erreur en écrivant :cannot convert parameter 1 from 'unsigned char [64]' to 'char *'
Mais le problème, c'est qu'il y a plusieurs centaines d'erreurs du même tonneau éparpillées dans le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part addTag ((char*)buffer, "tag");
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 ?
Partager