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