Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Stream aus DLL empfangen?

  Alt 7. Apr 2020, 12: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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