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 |
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) |
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 |
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