C++ Callback in C Kontext verfügbar machen

  • Moin,


    in meinem softhddevice-opengl Fork möchte ich erreichen, dass ich auf Änderungen der Fenstergröße reagieren kann. Dazu müsste ich die Änderung der Fenstergröße im cSoftOsdProvider mitbekommen. SHD hat bereits eine Funktion implementiert, die den X Event beim Ändern der Fenstergröße bearbeitet, siehe hier in video.c. In der aufgerufenen Funktion VideoSetVideoMode steht bereits der nette Kommentar "FIXME: must tell VDR that the OsdSize has been changed!"...die Frage ist jetzt: wie mache ich das am elegantesten? ;)


    Meinem Verständnis nach müsste im C "video Kontext" eine Callback Funktion verfügbar sein, die dann im C++ "cSoftOsdProvider" Kontext aufgerufen wird und auf (zumindest statische) Methoden vom cSoftOsdProvider zugreifen kann. Das geht sicherlich mit irgendwelchen schrägen "extern C" Konstrukten...aber so ganz steige ich da noch nicht durch ;) Ich hab noch nichts ausprobiert...vielleicht hat jemand nen konkreten Tipp für mich, wie man das machen könnte, das würde mir sicherlich einiges an Zeit sparen :D


    Ciao Louis

  • Einen Pointer auf eine statische C++ Funktion kannst du genauso verwenden wie den Zeiger auf eine C-Funktion.
    Die meisten Callbacks bieten an, einen void* als Userdata zu übergeben. Da packe ich dann meistens den Pointer auf das Objekt der Klasse rein, den ich dann stur in der statischen Funktion zurück caste, um dann eine entsprechende Member-Funktion aufzurufen.


    Lars.

  • Konkret geht es doch sicherlich um cOsdProvider::UpdateOsdSize(true), oder?
    Das ruft dann ja

    Code
    cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);


    auf und alles müsste ok sein?


    Lars.

  • Moin Lars,

    Einen Pointer auf eine statische C++ Funktion kannst du genauso verwenden wie den Zeiger auf eine C-Funktion.


    ok, damit kann ich arbeiten ;) Danke für den Hinweis...


    Ciao Louis

  • Konkret geht es doch sicherlich um cOsdProvider::UpdateOsdSize(true), oder?


    Hm, muss ich mir mal genau anschauen. Ich denke da muss sich noch nen Wrapper drumm rumm bauen, ich muss ja auch meinen OpenGL Kontext löschen und neu anlegen.


    Ciao Louis

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!