Kann Methoden Parameter nicht ändern, brauche aber Pointer auf Formular
-
Hi,
Ich schreibe ein Proramm zum entpacken und sortieren...
Ich benutze unter anderem die unrar.dll dafür und programmiere mit RAD Studio.
Es funktioniert alles soweit ganz gut nur gibt es eine Methode in der DLL die RARSetCallback(hArcData,CallbackProc,0) heißt der 1. Parameter ist ein HANDLE auf die geöffnete Rar Datei und das zweite ein Pointer zu einer vom Benutzer Definierten Callback Funktion . Zu dieser Funktion wird gesprungen wenn wärend des entpackens zb ein Passwort benötigt wird usw. Dort kann man also die Ereignisse verarbeiten. Es waren bei der unrar.dll Beispiele fürs Implementieren dabei und eines auch in C. In diesem Beispiel wird das Passwort dann in der Callback Funktion über Konsole abgefragt oder andere Messages ausgegeben. Da ich aber eine Formular Anwendung programmiere hätte ich die Ausgabe gerne über ListBox und die Eingabe über Edit oder ähnliches. Dieser Funktion kann ich leider keine neuen Parameter hinzufügen und nun weiß ich nicht wie ich ein Pointer auf eine ListBox oder ein Edit des Formulars bekommen soll.Wäre für Hilfe sehr dankbar.
Gruß FloH
-
Flo0000 schrieb:
nur gibt es eine Methode in der DLL die RARSetCallback(hArcData,CallbackProc,0) heißt der 1. Parameter ist ein HANDLE auf die geöffnete Rar Datei und das zweite ein Pointer zu einer vom Benutzer Definierten Callback Funktion .
Der dritte Parameter ist nicht zufällig ein benutzerdefinierter Parameter, der an die Callback-Funktion weitergegeben wird?
Falls nein (und das hielte ich für einen Designfehler im WinRAR-API), so bleiben dir folgende Möglichkeiten:
- Du könntest eine statische threadsichere Parameterliste mit std::map <std::pair <HANDLE, CallbackFuncType>, ParamType> erstellen (für den Key-Typen mußt du ggf. den operator < implementieren), aus der die Callback-Funktion ihre Argumente ausliest.
- Du generierst zur Laufzeit eine Wrappermethode. Das ist nicht ganz trivial, darüber hinaus ziemlich plattformabhängig, aber das ist die unrar.dll ja schließlich auch. Diese Lösung wäre aus der Perspektive der objektorientierten Programmierung die sauberste.
- Zur Übergabe zusätzlicher Daten an deine Callback-Funktion benutzt du thread-lokale statische Variablen. Das ist allerdings nicht besonders sauber.