AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von JonnyGuitar · begonnen am 1. Okt 2013 · letzter Beitrag vom 2. Okt 2013
Antwort Antwort
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#1

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

  Alt 1. Okt 2013, 14:30
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#2

AW: Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist

  Alt 1. Okt 2013, 14:40
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)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist

  Alt 1. Okt 2013, 16:25
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
  Mit Zitat antworten Zitat
JonnyGuitar

Registriert seit: 4. Jun 2004
233 Beiträge
 
#4

AW: Speicher wieder freigeben der in C++ DLL mit GlobalAlloc alloziert worden ist

  Alt 2. Okt 2013, 07:18
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
the only thing to fear is runnin' out of beer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 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