C++ code in C aufrufen
-
Hallo,
gibt es irgendwo howto wie man C++ Code/Bibliothek in C benutzen/aufrufen kann?Viele Grüße
-
die schnittstellen des c++-codes müssen als 'extern "C"' deklariert sein, damit das funzt.

-
Gibt es irgendwelche Beispiele wie man es genau macht mit Klassen, Tampletes usw.?
-
dog schrieb:
Gibt es irgendwelche Beispiele wie man es genau macht mit Klassen, Tampletes usw.?
Du kannst in C keine Klassen und Templates verwenden; du musst diese C++ Funktionalität in einfache Funktionen kapseln und diese dann als
extern "C"deklarieren um sie aus C verwenden zu können
-
ah, ok und gibt es für diese Kapselung irgendwelche Beispiele?
-
dog schrieb:
ah, ok und gibt es für diese Kapselung irgendwelche Beispiele?
was ist an "Funktion als
extern "C"deklarieren" undeutlich?
-
Auch wenn man C++ 'in einfache Funktionen kapselt' kann kein C-Compiler damit etwas anfangen, sobald auch nur ein C++ Sprachmittel darin vorkommt. Da nützt auch keine extern "C" Deklaration etwas.
Du hast diese Möglichkeiten:
- Benutze einen C++ Compiler.
- Erstelle eine *.dll und exportiere die Klassen.
C++ Code mit einem C-Compiler zu benutzen, bzw. diesen einzubinden kann man unter Windows mit *.dll Dateien realisieren.
-
dog schrieb:
ah, ok und gibt es für diese Kapselung irgendwelche Beispiele?
extern "C" int cpp_interface (void) { // ... hier c++ code rein std::blah *a = new std::blah (...); std::blubb b(...); return a->mach_dies()+b.mach_jenes(); }
-
wattsafugga schrieb:
Du hast diese Möglichkeiten:
- Benutze einen C++ Compiler.
- Erstelle eine *.dll und exportiere die Klassen.
C++ Code mit einem C-Compiler zu benutzen, bzw. diesen einzubinden kann man unter Windows mit *.dll Dateien realisieren.[B]UPDATE:[\B]
/* File : example.h */ class Shape { public: Shape() { nshapes++; } virtual ~Shape() { nshapes--; }; double x, y; void move(double dx, double dy); virtual double area(void) = 0; virtual double perimeter(void) = 0; static int nshapes; }; class Circle : public Shape { private: double radius; public: Circle(double r) : radius(r) { }; virtual double area(void); virtual double perimeter(void); }; class Square : public Shape { private: double width; public: Square(double w) : width(w) { }; virtual double area(void); virtual double perimeter(void); };/* File : example.c */ #include "example.h" #define M_PI 3.14159265358979323846 /* Move the shape to a new location */ void Shape::move(double dx, double dy) { x += dx; y += dy; } int Shape::nshapes = 0; double Circle::area(void) { return M_PI*radius*radius; } double Circle::perimeter(void) { return 2*M_PI*radius; } double Square::area(void) { return width*width; } double Square::perimeter(void) { return 4*width; }Ich möchte den g++ und gcc verwenden. Wie erstellt man mit g++ eine dll/so und wie kann man diese in gcc einbinden ohne das man die Orginalen Datei ändert?