Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist (https://www.delphipraxis.net/176874-speicher-wieder-freigeben-der-c-dll-mit-globalalloc-alloziert-worden-ist.html)

JonnyGuitar 1. Okt 2013 14:30

Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist
 
Hallo zusammen,

ich benutze eine Funktion einer C++ DLL die für einen WCHAR* Speicher mit
GlobalAlloc alloziert. Nun möchte ich in meiner Delphianwendung den für den
PWideChar reservierten Speicher wieder freigeben. Eigentlich wollte ich
dafür GlobalFree benutzen, jedoch erwartet diese Funktion einen Cardinal Wert.
FreeAndNil oder WStrDispose scheitern mit der Fehlermeldung.
FreeAndNil bring eine Zugriffsverletzung, WStrDispose eine ungültige Zeigeroperation.

Kann mir einer sagen wie ich in diesem Fall richtig vorgehen muss?


Gruss und Danke Jonny

Mikkey 1. Okt 2013 14:40

AW: Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist
 
Zu "GlobalAlloc" gehört definitiv "GlobalFree".

Allerdings bekommt GlobalFree als Argument den Handle, der von GlobalAlloc zurückgegeben wurde.

Dieser Handle ist nicht der Pointer auf das Memory!

Der Ablauf bei der Verwendung nur in C sieht das so aus:

Delphi-Quellcode:
HGlobal h = GlobalAlloc(..)
LPVOID p = GlobalLock(h)
{ arbeite mit p-> }
GlobalUnlock(h)
GlobalFree(h)

Blup 1. Okt 2013 16:25

AW: Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist
 
Eigentlich ist es ja die Aufgabe der DLL für die Freigabe zu sorgen oder eine passende Methode bereitzustellen.
Vieleicht kann "GlobalHandle()" helfen.
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

JonnyGuitar 2. Okt 2013 07:18

AW: Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist
 
Vielen Dank für eure Hilfe,

ich habe das Problem gelöst in dem ich wie Blup schrieb eine Methode
bereitstelle, die den Speicher freigibt.


Gruss Jonny


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz