VCL artige Klasse casten ?
-
Moinse,
also ich bastel gerade mit FMOD rum und muss ein paar Callbacks angeben welche static sein müssen. Um nun wieder an meine Klasse ranzukommen muss ich nun irgendwie das hier unten entsprechend casten (in userdata wird die klasse übergeben). Das Problem, die Klasse ist ein Thread-Objekt und der BCB meckert mich an das ich VCL artige Klassen nur mit new erstellen kann.
FMOD_RESULT F_CALLBACK howlingStreamRipper::myopen(const char *name, int unicode, unsigned int *filesize, void **handle, void **userdata) {So what to do ?
-
Hallo
zeig doch mal deine versuchte Umwandlung.
Du must den reinterpret_cast einsetzen, um auf void* und zurück zu casten.bis bald
akari
-
Schonmal danke für die Antwort, kann damit zwar noch nix anfangen, aber erstmal in der doku lesen was die zu reinterpret_cast sagt ;).
meine versuche sahen z.b. so aus (dürfte dezent falsch sein), was dann dank dieser VCL-Fehlermeldung schonmal im Kaim erstickt wurde

FMOD_RESULT F_CALLBACK howlingStreamRipper::myopen(const char *name, int unicode, unsigned int *filesize, void **handle, void **userdata) { howlingStreamRipper * cls = (howlingStreamRipper)userdata; cls->FileHandle = fopen(cls->OutputFileName, "wb"); if (!cls->FileHandle) { return FMOD_ERR_FILE_NOTFOUND; } return FMOD_OK; }
-
Hallo
howlingStreamRipper * cls = reinterpret_cast<howlingStreamRipper *>(userdata);Das kommt aber darauf an, wie du das VCL-Objekt den nun in userdata rein-castest.
bis bald
akari
-
Tjo, genaugenommen mach ich da gar nicht viel ausser der FMOD-klasse mittels
setUserData (system, this);das ganze zu übergeben.
-
Hallo
dann must du so wie ich es geschrieben hab casten.
bis bald
akari
-
Gerade mal probiert, klappt wunderbar, herzlichen Dank

-
Galeon schrieb:
//... howlingStreamRipper * cls = (howlingStreamRipper)userdata; //...das hätte auch mit deinem c-style-cast geklappt, hättest du nicht den zeiger vergessen. kannst nichts auf nen statisches objekt (weiss net ob das so heisst) casten, wenn ein zeiger gefordert ist.
//... howlingStreamRipper *cls = (howlingStreamRipper[b]*[/b]) userdata; //...