Deutsch
Forum

Prozeduradressen wieder freigeben?

 

Jac
de
Lad
Etwas in der Hilfe macht mir Kopfzerbrechen:

Die Callback-Funktionen können 0 bis 5 Parameter (alle 32 Bit) haben und einen 32-Bit-Wert zurückliefern. Für jede Parameterzahl kann es derzeit maximal 5 Callbackfunktionen geben. Das dürfte auf alle Fälle ausreichend sein.Und wenn es doch nicht ausreicht, kann man einen benutzen Callback-Platz auch wieder freigeben, indem man vor die Parameterzahl ein - setzt:

ProcAddr(Fontliste,-4)

Was bedeutet das? Dass ich die Prozeduren wieder freigeben muss? Hat jemand ein sinnvolles Beispiel mit ner sinnvollen Anwendung?

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
01.10.2006  
 




Michael
Wodrich
Das heißt schlicht, das der Programmzeiger, den Du zugewiesen hattest danach nicht mehr aufgerufen wird. Du schaltest diesen Callback also aus und kannst damit dann eine andere Proedur aufrufen.

Wenn die Callback-Prozedur das ganze Programm hindurch laufen soll, dann ist das natürlich nicht sinnvoll. Es gibt aber in der API Callbacks die zB zum Zählen von Fonts aufgerufen werden (für jeden Font ein Mal). Wenn alles durchgenudelt ist, dann kann dieser Callback wieder recyclet werden.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
02.10.2006  
 




Jac
de
Lad
Ich habe das leider immer noch nicht verstanden..verändern sich die Zeiger beim Laufen des Programms?
Haste vielleicht ein Beispiel mit ner sinnvollen Anwendung von ProcAddr(Prozedur,-4) (also, wo der Negativwert eine Rolle spielt)?
 
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
02.10.2006  
 



Ich versuche mich mal dran - hoffe, Roland verbessert mich, wenn ich da Mist rede:
Profan erzeugt nach dem compilieren aus deinem Quelltext keinen Maschinencode, sondern übersetzt den verschlüsselten Quelltext einfach nur und führt dann das aus, was da steht. Dein Quelltext ist quasi wie ein Buch, in dem Profan liest und dann an bestimmten Hebeln zieht um etwas in Windows zu bewirken. Nativer Quelltext zieht dagegen direkt an den Hebeln.

Ein Callback soll direkt einen Hebel in gang setzen, da Proan aber erst nachschlagen und übersetzen muß, geht das eigentlich gar nicht. Was wird also wohl Profan bei der Funktion ProcAddr machen? Es übergiebt quasi die Adresse einer Funktion, die aus dem Buch einen Quelltextabschnitt ließt. Damit diese Funktion aber weiß, wo sie im Buch welche Quelltextseite aufschlagen muß, muß das irgendwo abgespeichert werden - was abgespeichert wird, braucht aber Platz. Ausreichend Platz zum Abspeichern ist für 5Callbackfunktionen (pro Parameterzahl) da, da liegt das Problem.
 
02.10.2006  
 



Und hier mal der verlangte Quelltext:
KompilierenMarkierenSeparieren
DEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Def @SetTimer(4) !"USER32","SetTimer"
Def @KillTimer(2) !"USER32","KillTimer"
Declare Timer_WIN&,Button&,Zähler%,TIMER_ID&,PRO_ID&
Windowstyle 31+512
Windowtitle "Selbständig laufende Programmschleife"
Window 0,0-640,440
Usermessages $10
LET TIMER_WIN&=@Control("Static","TIMER_WIN",$8000000,0,0,0,0,%Desktop,9998,%HINSTANCE,$4)
Let Button&=@createbutton(%HWND,"",20,100,300,30)
LET TIMER_ID&=@SetTimer(TIMER_WIN&,9999,1500,@ProcAddr("TimerProc1",4))

While %UMESSAGE<>$10

    Waitinput

    IF @ButtonClicked(Button&)

        IF PRO_ID&=1

            @ProcAddr("TimerProc1",-4)
            @ProcAddr("TimerProc2",4)

        ELseif PRO_ID&=2

            @ProcAddr("TimerProc2",-4)
            @ProcAddr("TimerProc1",4)

        Endif

    endif

wend

@KiLLTIMER(TIMER_WIN&,TIMER_ID&)
end

Proc TimerProc1

    Parameters ahhwnd&,ahuMsg&,ahidEvent&,ahdwTime&
    LET PRO_ID&=1
    Settext Button&,"Von Proc 1 gesetzt!"

Endproc

Proc TimerProc2

    Parameters ahhwnd&,ahuMsg&,ahidEvent&,ahdwTime&
    LET PRO_ID&=2
    Settext Button&,"Von Proc 2 gesetzt!"

Endproc

 
02.10.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

600 Betrachtungen

Unbenanntvor 0 min.
Sven Bader30.09.2021
E.T.01.12.2011
Claus Mueller19.07.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie