C++ Code in C-Programm verwenden (??)



  • Hallo!

    Ich habe folgendes Problem:
    Ich hab einen Treiber in C vorliegen und will diesem Treiber Code hinzufügen, der aber leider in C++ vorliegt.
    Nun würd ich gerne wissen, ob ihr damit schon Erfahrung gemacht habt oder ob ihr mir da was empfehlen könnt?

    Grüße
    Holger



  • Ähm den C++ Code umschreiben in C Code ?



  • ^^ nein das wäre zu aufwendig!
    Es geht doch bestimmt mit nem Wrapper oder ähnl.
    Nur weiß ich nicht genau wie das geht.



  • Haben Treiber Zugriff auf DLLs - klar, oder? Na dann ab mit dem Code in eine DLL 🙂

    MfG SideWinder



  • Samptron schrieb:

    Hallo!

    Ich habe folgendes Problem:
    Ich hab einen Treiber in C vorliegen und will diesem Treiber Code hinzufügen, der aber leider in C++ vorliegt.
    Nun würd ich gerne wissen, ob ihr damit schon Erfahrung gemacht habt oder ob ihr mir da was empfehlen könnt?

    Grüße
    Holger

    Wenn der neue code C++ ist ( so verstehe ich deine Frage ) dann ist das überhaupt kein Problem. Du musst nur die Header vom alten Code in extern "C" wrappen und neu linken. Umgekehrt wirds schwieriger.
    Kurt



  • @SideWinder: Treiber läuft unter Linux 😉

    @Zuk: Hmm... ok! Das sind Begriffe mit denen ich zwar (noch) nicht viel anfangen kann, aber ich google mal einwenig. Oder kannst du mir vielleicht ein Beispiel nennen?



  • Mit linux Treiber-programmierung habe ich keine Erfahrung. Hab das ungefähr so gemeint:
    im C++ Code

    #include ...
    
    extern "C" {
      #include "cdriverfuncs.h" // alte Driver-funktionen
    }
    
    class mydriver {
    public:
       mydriver() {
          driverinit();   // Funktion liegt im C-code
                          // durch extern "C" findet der linker die funktion
          ....
       }
       ....
    };
    

    Vielleicht kann ich bei konkreteren Problemen helfen.
    Kurt



  • Ok ich seh grad wir reden aneinander vorbei. Sorry meine Schuld.

    Mein Treiber ist in C und soll auch in C bleiben.
    Es kommt nur zusätzlich ein Teil dabei, der mir aber nur in C++ vorliegt.
    Also bräuchte ich einen C-Wrapper der mir den C++Teil einbindet.



  • Du hast z. B. folgende Klasse:

    Class MyDriver
    {
    private:
        // Irgentwelche Variablen
    
    public:
        MyDriver ();
    
        int MakeThis (void);
    
        int MakeThat (void);
    }
    

    Dann vergisst Du dass globale Virablen ein absolutes No-No sind und schreibst folgenden C-Code:

    MyDriver    *pMydriver = NULL;
    
    int Init (void)
    {
        int    iReturn = 0;
    
        try
        {
            pMyDriver = new MyDriver;
        }
        catch (...)
        {
            iReturn = 1;
        }
        return iReturn;
    }
    
    int MyDriverMakeThis (void)
    {
        return pMyDriver->MakeThis ();
    }
    
    int MyDriverMakeThat (void)
    {
        return pMyDriver->MakeThat ();
    }
    
    void MyDriverEnd (void)
    {
        delete pMyDriver ()
    }
    

    Das compilierst Du dann als Lib und bindest den dazugehoerigen Headerfile in Dein C-Prg ein:

    int Init (void);
    int MyDriverMakeThis (void)
    nt MyDriverMakeThat (void)
    void MyDriverEnd (void)
    


  • Tjo nur dass es in C keine Exceptions gibt und dass Klassen nicht das einzige neue sind in C++



  • Exceptions, Ueberlagerungen etc. muessen im C-Layer gecovert werden. Das ist umstaendlich. Der Layer muss als C++-Programm compiliert werden, darf aber nur klassische C-Aufrufe enthalten in Header nach aussen enthalten. Eine Sch...-Arbeit ...


Anmelden zum Antworten