Italia
Stammtisch & Caffè

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 Io l' 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
Downloadcounter87
Download
82 kB
Kurzbeschreibung: BILD 2
Hochgeladen:21.05.2006
Downloadcounter73
Download
46 kB
Kurzbeschreibung: BILD 3
Hochgeladen:21.05.2006
Downloadcounter76
Download
71 kB
Kurzbeschreibung: BILD 4
Hochgeladen:21.05.2006
Downloadcounter88
Download
69 kB
Kurzbeschreibung: BILD 5
Hochgeladen:21.05.2006
Downloadcounter85
Download
70 kB
Kurzbeschreibung: BILD 6
Hochgeladen:21.05.2006
Downloadcounter84
Download
69 kB
Kurzbeschreibung: BILD 7
Hochgeladen:21.05.2006
Downloadcounter83
Download
 
21.05.2006  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

944 Views

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

Themeninformationen

Dieses Thema hat 1 subscriber:

unbekannt (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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