| |
|
|
Jac de Lad | Hallöle,
wie kann ich die Adresse einer Callback-Funktion in Profan nutzen? Also ich meine, ich schreibe eine schrecklich komplizierte Funktion und will, dass der Fortschritt von was auch immer ausgegeben wird. Also soll als Parameter die Adresse einer Funktion mittels ProcAddr übergeben werden. Kann ich die dann per Call aufrufen???
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 05.07.2006 ▲ |
|
|
|
|
Sebastian König | Hallo Jac,
im Prinzip sollte es kein Problem sein, eine Prozedur über ihre ProcAddr() aus dem eigenen Programm heraus mit Call() aufzururfen, allerdings fällt mir im Moment keine Situation ein, in der das sinnvoll wäre - Du kannst die Prozedur schließlich selbst ganz normal aufrufen.... (oder bin ich jetzt nur zu phantasielos? )
Der primäre Nutzen ist der Callbacks ist sicherlich die Möglichkeit die Adressen an bestimmte API-Funktion zu übergeben, die eine Callback-Adresse erwarten - zum Beispiel SetWindowLong() - Stichwort Subclassing - oder auch SetTimer().
MfG
Sebastian |
|
|
| |
|
|
|
| Genau, auch Funktionen welche irgendwas enumierieren (oder iterieren ) brauchen oft eine Prozeduradresse um die Einzelergebnisse abzuliefern. Z.B. Auflisten von installieren Fonts oder Dateidownload mit Prozessbar...
Du kannst das Call auch gut verwenden wenn Du innerhalb von ASM-Passagen auf XProfanprozeduren zugreifen möchtest. |
|
|
| |
|
|
|
| Mit einem Callback gibts Du anderen Funktionen, meist in DLLs (so wie die API ja auch) eine Funktionsadresse, welche diese direkt aufrufen und ausführen können, Fast unabhängig davon was Dein Programm gerade macht. Deshalb kann so ein Callback unter anderem, für ein flüssigeren Lauf der Ereignisbehandlung sorgen. Selber aufrufen eines solchen Callback per Call macht im allgemeinen wirklich keinen Sinn , So ein Callback ist in gewisser Hinsicht fast ein Thread. Einsatzgebiete, wie iF schon teilweise sagte, Windows-Callback, Enumerationen, Streaming von Daten (z.B. um RTF schnell zu füllen) oder auch Fortschrittsanzeigen, weil eine Pack- oder Kopierroutine länger braucht, und so schnell mal Meldung macht und auch auf Abbruch prüft. |
|
|
| |
|
|
|
Jac de Lad | Hm, das klärt meine Frage.
@Sebastian: Ich hab zum Beispiel eine PCU, die eine lange Operation ausführt und als Parameter übergebe ich die Adresse einer Profan-Prozedur, die dann meinetwegen einen Wert in Prozent bekommt und dann das entweder ausgibt oder was draus berechnet oder...ist also recht sinnvoll!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 06.07.2006 ▲ |
|
|
|
|
Sebastian König |
@Sebastian: Ich hab zum Beispiel eine PCU, die eine lange Operation ausführt und als Parameter übergebe ich die Adresse einer Profan-Prozedur, die dann meinetwegen einen Wert in Prozent bekommt und dann das entweder ausgibt oder was draus berechnet oder...ist also recht sinnvoll!
Ok, stimmt . Auch für die von iF erwähnten ASM-Passagen ist es natürlich praktisch.
MfG
Sebastian |
|
|
| |
|
|