C++ Code in C linken

#2232194
Lesenswert?

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
#2249270
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren