hallo, ich habe .cpp - Source code mit einem header in welchem die Funktionen aus (.cpp) deklariert sind. Diesen header möchte ich in einem .c projekt verwenden (visual studio). wie kann ich das richtig linken? irgendwie muss das doch mit "extern" gehen?? aber wo genau muss ich den code einpflegen?? ich finde nur beispiele wo leute einen C-code in .cpp einbetten wollen - ich möchte das ja genau andersrum machen... danke schon mal
C aus C++ heraus aufrufen ist problemlos. Andersrum wird interessant. Du kannst in C++ eine Funktion bauen, die per extern "C" { ... } als C-kompatible Funktion den Zwischenhändler mimt.
kannst du das noch etwas weiter beschreiben? ich bin da nicht so fit drin...
max .. schrieb: > ich bin da nicht so fit > drin... Dann geh den einfachen weg, und compilier das ganze Projekt mit dem C++-Kompiler.
Hallo max .., Du mußt das folgendermaßen angehen: 1. Du kannst von C aus nur auf solche C++-Funktionen zugreifen, die keine Objekttypen oder andere C++-spezifische Datentypen benutzen. Falls Objekttypen oder C++-Datentypen vorkommen, dann mußt Du neue, C-kompatibele Wrapperfunktionen schreiben, die die entsprechende C++-Funktionalität aufrufen und Type Casts durchführen oder so. 2. Die Funktionen, die von C aus aufgerufen werden sollen, müssen in C++ als "extern "C"" markiert werden. Da C kein "extern "C" ..." kennt, muß das wiederum in #ifdef s gekapselt werden. Aus der C++-Deklaration
1 | int meineFunktion(); |
2 | ...
|
wird dann die C-kompatibele Version:
1 | #ifdef __cplusplus
|
2 | extern "C" { |
3 | #endif
|
4 | |
5 | int meineFunktion(); |
6 | ...
|
7 | #ifdef __cplusplus
|
8 | }
|
9 | #endif
|
3. Falls noch C++-spezifische Funktionalität im Headerfile enthalten ist, einschließlich weiterer Includes, so muß diese ebenfalls in passende #ifdef s gekapselt werden, damit sie in C nicht sichtbar ist:
1 | #ifdef __cplusplus
|
2 | |
3 | #include <string> |
4 | |
5 | std::string meineStringFunktion(); |
6 | ...
|
7 | |
8 | #endif
|
Falls Du noch Fragen dazu hast, lies bitte erst mal die Beschreibungen zum Umgang mit diesem Define "__cplusplus" in der Dokumentation Deines C++-Compilers nach, dann wird es wahrscheinlich klar. Tschüß, Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.