Speicherallokierung mittels handle

HolgerX

Mitglied
Ich schreibe in C++ ein Programm und will alle C-Elemente vermeiden!

Da ich aber ein Rookie betreff C++ bin (C kann ich schon gar net!), habe ich keine Ahnung, wie man mit den handles umgeht.
Ich habe folgende Speicherallokierung mittels C, will das nun mit C++ machen, aber wie?
C-Code:
Code:
UCHAR* lpVoid;
lpVoid = (UCHAR *)GlobalLock(hMem);
Wobei hMem ein Handle ist.
Mit
Code:
unsigned char* lpVoid;
lpVoid = new unsigned char [hMem];
gehts jedenfalls nicht, weil hMem ein void* zurückliefert.
 
Hier kannst du mit Standard-C++ nichts machen - hier musst du die C-Syntax nehmen. GlobalLock ist eine Funktion der Windows API. Diese Funktion braucht ein handle - was eine Identifikationsnummer ist mit der Windows seine Objekte identifiziert.
In der MSDN-Doku wird vorgeschlagen, sie durch modernere heap Funktionen zu ersetzen.

Lies dir am besten die Beschreibungen in der MSDN-Doku durch für GlobalLock, GlobalAlloc/GlobalReAlloc und entscheide dann ob du sie komplett durch new oder ähnliches ersetzen kannst.

Dein Beispiel läßt sich ohne vorherigen Code leider nicht weiter lösen.
 
Die Vorgehensweise ist:
1. Speicher reservieren mit GlobalAlloc
2. Speicher "locken" mit GlobalLock
3. Speicher benutzen
4. Speicher "unlocken" mit GlobalUnlock
5. Speicher freigeben mit GlobalFree

Wie aber schon squeaker und die MSDN sagen, nimm lieber new und delete.

Code:
new unsigned char [hMem];

Diese Zeile würde bedeuten: Reserviere hMem Bytes. hMem ist vermutlich irgendein Wert (und noch dazu ein großer), der nix mit der Byteanzahl zu tun hat. Vermixe auf keinen Fall unterschiedliche Arten der Speicherverwaltung!
 
Zurück