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