Eigentlich Recht einfach.
- TStream-Nachfolger können nicht direkt an IStream übergeben werden.
> TStream ist halt ein Delphi-Typ und ISteam kommt irgendwo aus dem OLE32, oder so.
> Gut, man hätte natürlich auf die Idee kommen können, die Methoden von IStream direkt in TStream einzubauen, damit man auch direkt darüber das IStream hätte supporten können, aber so schlau war wohl Keiner.
Man nimmt also irgendeinen Stream, packt ihn in den TStreamAdapter und überlegt sich dann noch, wer für die Freigabe sorgen soll.
Delphi-Quellcode:
type
IMyIntf = interface
function GetStream: IStream;
procedure PutStream(S: IStream);
end;
function TMyClass.GetStream: IStream;
begin
Result := TStreamAdapter.Create(FStream, soReference);
end;
function TMyClass.GetStream: IStream;
begin
Result := TStreamAdapter.Create(TFileStream.Create('Test.dat', 0), soOwned);
end;
begin
MyIntf.PutStream(TStreamAdapter.Create(FStream, soReference));
end;
begin
MyIntf.PutStream(TStreamAdapter.Create(TFileStream.Create('Test.dat', 0), soOwned));
end;