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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.