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
HolgerWenn 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 ...