Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

AW: Stream aus DLL empfangen?

  Alt 7. Apr 2020, 11:13
Nja, man kann auch die Daten ganz "klassich" als (Buffer: Pointer; Length: Integer) übergeben,

Jupp, es gibt im Windows das MSDN-Library durchsuchenIStream-Interface, inkl. MSDN-Library durchsuchenISequentialStream, 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Apr 2020 um 19:01 Uhr) Grund: schlechtschreibung
  Mit Zitat antworten Zitat