Deutsch
Stammtisch & Café

TNT, Speicherobjekte und Handles

 
Es geht erst einmal um folgenden Quelltext:
KompilierenMarkierenSeparieren
Def @LocalAlloc(2) !"KERNEL32","LocalAlloc"
Def @LocalFree(1) !"KERNEL32","LocalFree"
Declare HMEM&
LET HMEM&=@LocalAlloc($2 | $40,32)
PRINT HMEM&
Waitinput
@LocalFree(HMEM&)

Da Profan etwas verschwenderisch mit Heaps umgeht, habe ich den Quelltext der Einfachheit halber mit Profan2Cpp compiliert.
Auf dem Bildschirm wird hier das Handle des mit LocalAlloc erzeugten Speicherobjektes ausgegeben (bei mir 44564492):

[...] 

Zuerst liste ich dann mit [...]  Heaps des mit dem Quelltext erzeugten Prozesses:

[...] 

Jetzt tue ich mal so, als wäre das mit LocalAlloc erlangte Handle eine Adresse und lese mit [...]  4 Bytes ab dieser Adresse als dezimales Doubleword aus:

[...] 

Bei mir erhalte ich die Zahl 38118320.

[...] 

Jetzt tue ich wieder mal so als wäre die erhaltene Zahl eine Adresse. Wenn ich mir jetzt die vorher ausgelesenen Heapblöcke ansehe, finde ich diese Adresse bei mir im 1.Heap wieder:

[...] 

Jetzt schaue ich mir mal mit [...]  den Inhalt dieses Heapblocks etwas genauer an, und zwar als dezimale Doublewords:

[...] 

[...] 

Nach dem Kopieren in die Zwischenablage kommt bei mir das heraus:
[box:60341a6031]
X1=0
X2=0
X3=0
X4=0
X5=0
X6=0
X7=0
X8=0
X9=0
X10=44564492
X11=393249
X12=524544
[/box:60341a6031]
Am Ende dieses Heapblockes steht hier scheinbar die in der WIN32.HLP beschriebene Heapkontrollstruktur - und ein Teil dieser Struktur steht wiederum das Handle des vorher mit LocalAlloc erzeugten Speicherbereichs (bei mir, wie gesagt, 44564492).

Die ganze Sache läßt sich mittels folgendem Code auch nochmals näher überprüfen:
KompilierenMarkierenSeparieren
Def @LocalAlloc(2) !"KERNEL32","LocalAlloc"
Def @LocalFree(1) !"KERNEL32","LocalFree"
Def @LocalLock(1) !"KERNEL32","LocalLock"
Def @LocalUnlock(1) !"KERNEL32","LocalUnlock"
Declare HMEM&
LET HMEM&=@LocalAlloc($2 | $40,32)
PRINT HMEM&
Print @Locallock(HMEM&)
Waitinput
@LocalUnlock(HMEM&)
@LocalFree(HMEM&)

Und auch so funktioniert es:
KompilierenMarkierenSeparieren
Def @GlobalAlloc(2) !"KERNEL32","GlobalAlloc"
Def @GlobalFree(1) !"KERNEL32","GlobalFree"
Declare HMEM&
LET HMEM&=@GlobalAlloc($2 | $40,32)
PRINT HMEM&
Waitinput
@GlobalFree(HMEM&)

14 kB
Kurzbeschreibung: BILD 1
Hochgeladen:21.05.2006
Ladeanzahl87
Herunterladen
82 kB
Kurzbeschreibung: BILD 2
Hochgeladen:21.05.2006
Ladeanzahl73
Herunterladen
46 kB
Kurzbeschreibung: BILD 3
Hochgeladen:21.05.2006
Ladeanzahl76
Herunterladen
71 kB
Kurzbeschreibung: BILD 4
Hochgeladen:21.05.2006
Ladeanzahl88
Herunterladen
69 kB
Kurzbeschreibung: BILD 5
Hochgeladen:21.05.2006
Ladeanzahl85
Herunterladen
70 kB
Kurzbeschreibung: BILD 6
Hochgeladen:21.05.2006
Ladeanzahl84
Herunterladen
69 kB
Kurzbeschreibung: BILD 7
Hochgeladen:21.05.2006
Ladeanzahl83
Herunterladen
 
21.05.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

937 Betrachtungen

Unbenanntvor 0 min.
Christian Hahn14.12.2011
Klaus Ernst08.02.2011

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

unbekannt (1x)


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