Einzelnen Beitrag anzeigen

Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

Pointer, ist er nun da oder nicht?!

  Alt 29. Mai 2004, 00:41
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 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?

mfg phluphu
Christian "phlux" Arndt
  Mit Zitat antworten Zitat