Nja, man kann auch die Daten ganz "klassich" als
(Buffer: Pointer; Length: Integer)
übergeben,
Jupp, es gibt im Windows das
IStream-Interface, inkl.
ISequentialStream, und Interfaces kannst du problemlos zwischen Modulen umherreichen.
TStream und dessen Nachfahren implementieren das aber nicht,
allerdings kann man es den in einem fertigen Adapter-Interface verpacken.
Delphi-Quellcode:
var
InnerStream: TStream;
Stream: IStream;
InnerStream := TFileStream oder sonstwas;
Stream := TStreamAdapter.Create(InnerStream, soOwned); // ab hier sollte die Objektreferenz besser nicht mehr verwendet werden (und natürlich auch kein .Free)
// oder z.B. direkt (so kommt man garnicht erst auf blöde Ideen)
Stream := TStreamAdapter.Create(TFileStream.Create(Path, fmOpenRead), soOwned);
und Stream kann nun beliebig als VAR- oder OUT-Parameter oder als RESULT übergeben werden.
Selbst ShareMem würde für TStream nicht ausreichen,
wenn dann ginge es nur indem man mit Packages kompiliert (mindestens
RTL), da man hierfür auf beiden Seiten nicht nur einen gemeinsamen Speichermanager, sondern vor allem die
selbe RTTI benötigt.