Kleines Problem beim Mischen von C und C++

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Kleines Problem beim Mischen von C und C++

Beitrag von BartSimpson »

Ich habe in einer C Bibliothek die folgende Funktion:
IS8 CT_keycb(IU16ctn, void (*cb) (void))
Unter C++ soll die Callbackfunktion entstehen.
Welche wie Folgt aussieht:
static void Rueckruf(XXX *quelle)
XXX hat den Sinn, das ich ein Zeiger auf mein C++ Objekt habe.
Nun habe ich versucht das wie folgt aufzurufen:
CT_keycb(K_Nummer,Rueckruf(this));
Nur leider nimmt mir der Compiler das nicht ab:(
Fehler: void-Wert nicht ignoriert wie es sein sollte
Wie muss ich das schreiben, das ich in der Callbackfunktion ein Zeiger auf meine C++ Klasse habe??
isifloh
Beiträge: 37
Registriert: 31. August 2006 09:40

Beitrag von isifloh »

hi

als lösung siehe hier
http://www.codeguru.com/cpp/cpp/cpp_mfc ... php/c4129/
bzw. hier
http://www.partow.net/programming/templ ... index.html

unter dem ersten link wird dir auch genau erklärt wieso das problem ist.

mfg
isifloh
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Nur leider trifft das hier nicht ganz zu.
Dort wird beschrieben, wie man in C++ eine C++ Callbackfunktion aufruft.
Aber in meinem Fall ist es keine C++ sondern eine C Funktion.
isifloh
Beiträge: 37
Registriert: 31. August 2006 09:40

Beitrag von isifloh »

hi

ja wie jedoch unter dem ersten link beschrieben hat c++ eine andere aufruf konvention. sprich das c kein this zeiger kennt.

du müsstest also in einer globen variable dir einen zeiger auf this setzen
irgendwo innerhalb deiner klasse bevor der callback das erste mal aktiviert wird.

und deine callback funktion muss als parameter einfach (void) haben.
iinerhalb der callback funktion kannst du dann mit hilfe der globalen variable auf die klasse zugreifen.

falls das noch immer nicht verständlich war kann ich dir auch noch ein code stück posten das dies zeigt.

mfg
isifloh
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Mit dem this Zeiger ist mir auch langsam eingefallen.
Man macht sowas ja nicht alle Tage:)
So jetzt habe ich meine Funktion nach
K_TasteGerueckt(const uint *terminal) umgeschrieben
In dieser gibt es jetzt ein QHash Feld, was mir den passenden Zeiger holt.
Wenn ich jetzt
CT_keycb(K_Terminalnummer,K_TasteGerueckt,&K_Terminalnummer);
schreibe, meckert der Compiler über:
error: invalid conversion from `void (*)(const uint*)' to `void (*)()'
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

So jetzt sollte es gehen.
Ein Gruß an die Doku der C Bibliothek.
Nur leider scheint diese an der Stelle etwas verbugt:(
Antworten