Forum: PC-Programmierung c code in c++, wrapper


von cwrapper (Gast)


Lesenswert?

Wen c code in c++ verwendet werden soll wird extern "c" benutzt. Den 
ganzen zusammenhang zwischen den unteren FUnktionen verstehe ich nicht 
ganz.
Wie genau hängen die Funktionen zusammen?

1
status startSensor()
2
    {
3
        // some code
4
        return SUCCESS;
5
    }
6
7
// exportetd function
8
extern "c" {
9
status plugin_start(pluginHdl sensor)
10
{
11
// some code
12
    return Context->startSensor();
13
}
14
15
status sensorPlugin_getFunctionTable(sensorPluginFunctionTable* functions)
16
{
17
    functions->common.start         = sensorPlugin_start; //was genau passiert hier?
18
}
19
}// extern "c"

von Oliver S. (oliverso)


Lesenswert?

Da wird ein Funktionspointer auf plugin_start() zugewiesen.

Oliver

von Wilhelm M. (wimalopaan)


Lesenswert?

cwrapper schrieb:
> status sensorPlugin_getFunctionTable(sensorPluginFunctionTable*
> functions)
> {
>     functions->common.start         = sensorPlugin_start; //was genau
> passiert hier?
> }

So, wie es da steht, sollte es eine Fehlermeldung wegen "undefined 
symbol" geben. Könnte mir aber vorstellen, dass Du da eine 
copy-n-paste-Fehler eingebaut hast.

Ansonsten verhindert das extern "C" das sog. name-mangling. 
Funktionsnamen können vom C++-Compiler wegen Funktionsüberladung nicht 
direkt in den Assemblertext übernommen werden, sondern werden ergänzt 
mit einer Zeichenkette, die sich aus der Parameterliste zusammensetzt. 
Dies unterdrückt extern "C", damit eine C-Funktion auch aus einem 
C++-Kontext heraus aufgerufen werden kann.

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.