![]() |
AW: DLL Exportiert ein Interface mit Strings...
Zitat:
|
AW: DLL Exportiert ein Interface mit Strings...
Zitat:
Mit Umstellung auf Unicode wurde das AnsiString erweitert und ist daher nicht mehr wirkltich kompatibel zueinander. Die DLL mit einer alten Delphiversion kompiliert, kommt mit der alten DCU klar, aber das Interface, welches die DLL veröffentlicht sollte daher maximal WideString oder PAnsiChar verwenden. |
AW: DLL Exportiert ein Interface mit Strings...
OK..
Was ist mit einem TStream? Mavarik |
AW: DLL Exportiert ein Interface mit Strings...
Das ist eine Klasse? Siehe oben bei RTTI.
Und TMemoryStream, TStringStream, TBytesStream usw. geht auch wieder auf SharedMem hinaus. Es gibt allerdings den IStream, aber der ist nicht kompatibel mit TStream's, wobei es dafür aber eine Wrapper-Klasse gibt. |
AW: DLL Exportiert ein Interface mit Strings...
Zitat:
|
AW: DLL Exportiert ein Interface mit Strings...
TStreamAdapter
|
AW: DLL Exportiert ein Interface mit Strings...
Zitat:
Zitat:
ok dann nochmal: Danke für die Info zum IStream. Die Wrapper Klasse hier für habe ich gefunden. Hast Du ein Stück Beispiel-Code, wie man das für eine bidirektionale Übergabe an eine DLL verwenden muss? Grüsse Mavarik |
AW: DLL Exportiert ein Interface mit Strings...
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. :stupid: 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; |
AW: DLL Exportiert ein Interface mit Strings...
Zitat:
Delphi-Quellcode:
Wenn die DLL_MachWas mit den Streams arbeitet? Wie kommt der Inhalt wieder zurück in A & B
Procedure Machwas(A,B:TStream);
var StreamA, StreamB : IStream; begin StreamA := TStreamAdapter.Create(A,soReference); StreamB := TStreamAdapter.Create(B,soReference); DLL_MachWas(StreamA,StreamB); // Soweit richtig? // Und dann? end; oder arbeitet die DLL dann auf A & B oder einer Kopie? Mavarik |
AW: DLL Exportiert ein Interface mit Strings...
Das bleibt die ganze Zeit da drin.
Der Stream-Adapter leitert nur alle Zugriffe auf die TStream-Klasse um, welche über seine Methoden gemacht werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz