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?


Anmelden zum Antworten