Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer, ist er nun da oder nicht?! (https://www.delphipraxis.net/23116-pointer-ist-er-nun-da-oder-nicht.html)

phlux 28. Mai 2004 23:41


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:
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;
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:

mfg phluphu :hi:

phlux 31. Mai 2004 12:03

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