Forum: PC-Programmierung C++ Code in C linken


von max .. (vbc2011)


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

von (prx) A. K. (prx)


Lesenswert?

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.

von max .. (vbc2011)


Lesenswert?

kannst du das noch etwas weiter beschreiben? ich bin da nicht so fit 
drin...

von Εrnst B. (ernst)


Lesenswert?

max .. schrieb:
> ich bin da nicht so fit
> drin...

Dann geh den einfachen weg, und compilier das ganze Projekt mit dem 
C++-Kompiler.

von Matthias H. (experimentator)


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

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
Noch kein Account? Hier anmelden.