Utiliser du code C++ dans du code C
Comment utiliser une classe C++ dans du code C?
Créer une classe C++, puis ajouter des fonctions d'interfaçage en extern "C":
//mylibtest.h //////////////////////////////////////////////////////////////////
#ifndef MYLIBTEST_H
#define MYLIBTEST_H
#ifdef __cplusplus
class HelloWorld
{
public:
void display();
};
// puis les fonctions d'interfaçge de la classe
extern "C"
{
#endif
void HelloWorldInit(); // appelle le constructeur
void HelloWorldDeinit(); // appelle une m�thode publique
void HelloWorldDisplay(); // appelle le destructeur
#ifdef __cplusplus
}
#endif
#endif
Dans le fichier cpp,
- ajouter une variable globale qui pointe sur instance de la classe:
HelloWorld* g_helloWorld;
- une fonction en extern "C" pour créer une instance de la classe
- une en extern "C" pour invoquer une méthode
- une en extern "C" pour invoquer le destructeur par le biais de delete
//mylibtest.cpp ////////////////////////////////////////////////////////////////
#include "mylibtest.h"
#include <iostream>
HelloWorld * g_helloWorld;
void HelloWorld::display()
{
std::cout << "hello" << std::endl;
}
void HelloWorldInit()
{
g_helloWorld = new HelloWorld;
}
void HelloWorldDeinit()
{
if (g_helloWorld) delete g_helloWorld;
}
void HelloWorldDisplay()
{
g_helloWorld->display();
}
Compiler la classe sous forme d' objet, avec un compilateur C++:
$ g++ -Wall -c mylibtest.cpp
Enfin le programme C:
//main.c ///////////////////////////////////////////////////////////////////////
#include "mylibtest.h"
int main()
{
HelloWorldInit();
HelloWorldDisplay();
HelloWorldDeinit();
return 0;
}
Compiler le C sous forme d'objet, puis les lier:
$ g++ -Wall -c main.c
$ gcc -Wall -lstdc++ main.o mylibtest.o -o test
$ ./test
hello
Plus d'infos ici