![]() |
Pointer, ist er nun da oder nicht?!
Hoi!
Also ich hab folgenden Code (es handelt sich dabei um einen Ausschnitt um Drag and Drop mit OLE zu realisieren):
Delphi-Quellcode:
So, jetzt will ich den Pointer als Funktionswert zurückgeben :mrgreen: was denke ich auch kein Problem ist, Unmut macht mir nur der Rot markierte Teil, da wird mit GlobalLock dieses "Global Memory" gelockt, dann wird dem Memo den Pointer mit dem Text zugewiesen, finalerweise wird das "Global Memory" wieder ungelockt, und dann wieder freigegeben. Meine Frage ist jetzt, wenn ich an dem Punkt wo dem Memo der Pointer zugewiesen wird, meiner Funktion den Pointer übergebe und dann weiter das "Global Memory" wieder freigebe könnte es doch theoretisch mit irgendwelchen Daten überschrieben werden und würde nicht mehr dem Inhalt entsprechen den ich in der Funktion bearbeiten möchte, oder? :gruebel:
function TMainForm.Drop(const dataObj: IDataObject;
grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; var aFmtEtc: TFORMATETC; aStgMed: TSTGMEDIUM; pData: PChar; begin {Make certain the data rendering is available} if (dataObj = nil) then raise Exception.Create('IDataObject-Pointer is not valid!'); with aFmtEtc do begin cfFormat := CF_TEXT; ptd := nil; dwAspect := DVASPECT_CONTENT; lindex := -1; tymed := TYMED_HGLOBAL; end; {Get the data} OleCheck(dataObj.GetData(aFmtEtc, aStgMed)); try // ROT HIER :D [color=red] {Lock the global memory handle to get a pointer to the data} pData := GlobalLock(aStgMed.hGlobal); { Replace Text } Memo1.Text := pData; finally {Finished with the pointer} GlobalUnlock(aStgMed.hGlobal); {Free the memory} ReleaseStgMedium(aStgMed); // ROT HIER ENDE ;) [/color] end; Result := S_OK; end; mfg phluphu :hi: |
Re: Pointer, ist er nun da oder nicht?!
*push* :dp:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz