Hallo,
hier kommt meine Vermutung
Delphi-Quellcode:
OleCheck(dataObj.GetData(aFmtEtc, aStgMed));
try
pData := GlobalLock(aStgMed.stm); // <--- Schreib hier mal sStgMed.stm (Du forderst ja einen Stream an)
SaveDropDataToFile(pData,'c:\stream.doc');
finally
GlobalUnlock(aStgMed.stm); // <--- Schreib hier mal sStgMed.stm
ReleaseStgMedium(aStgMed);
end;
Das Formular muss nur die Teile des IDropTarget implementieren, die noch nicht vorhanden sind.
Da alle Objekte ab TComponent das IUnknwon Interface unterstützen kannst Du Dir die Implementation AddRef und ReleaseRef sparen. Außdem sieht Deine Implentation der Methoden nicht so aus, als ob die einen Referenzzähler hoch oder runter zählen
Delphi-Quellcode:
procedure SaveDropDataToFile(Data:Pointer;Filename: String);
var
fs: TFileStream;
sa: IStream;
begin
fs := TFileStream.Create(Filename,fmCreate);
try
sa := TStreamAdapter.Create(fs, soReference) as IStream;
sa.Write(Data,SizeOf(Data),0); // <--- Hier sollte write stehen. Schließlich soll hier ja in den Stream geschrieben werden
finally
fs.Free;
end;
end;
Evt solltest Du
hier unter Registered Clipboard Formats nach schauen. CF_RIFF kommt mir irgendwie nicht ganz richtig vor.