![]() |
TFileStream an DLL übergeben
Hallo,
ich möchte einen Filestream an eine DLL übergeben. Die DLL hat dafür eine Funktion
Delphi-Quellcode:
und aufgerufen wird dies dann im Programm mit
procedure SetFileData(Data: Pointer; DataLen: int64); stdcall;
Delphi-Quellcode:
In der DLL dann soll das Ganze auf Plattefs := TFilestream.Create(Filename,fmOpenRead); SetFileData(@fs,fs.Size);
Delphi-Quellcode:
Leider ist meineTestDatei leer (0 Byte!)
procedure SetFileData(Data: Pointer; DataLen: int64); stdcall;
var Dateiname: string; fs: TFileStream; begin Dateiname := TPath.getsharedDocumentspath + TPath.DirectorySeparatorChar + 'meineTestdatei.txt'; fs := TFileStream.Create(Dateiname, fmCreate); fs.Write(Data^, DataLen); fs.free; Wo liegt der Fehler? Ciao Stefan |
AW: TFileStream an DLL übergeben
Du willst ja nicht die Stream-Instanz übergeben, sondern die Daten, die diese enthält. Ich würde einen TMemoryStream verwenden, der hat eine Memory-Eigenschaft, wo die Daten drinstehen.
|
AW: TFileStream an DLL übergeben
... und wie würde das aussehen?
Auch mit Übergabe eines array of byte bekomme ich Probleme! Ciao Stefan |
AW: TFileStream an DLL übergeben
Aus dem Hut würde ich sagen:
Delphi-Quellcode:
Bie der 0 bin ich gerade selbst nicht sicher.
var
Stream: TMemoryStream; begin Stream := TMemoryStream.Create; try Stream.LoadFromFile(...); Stream.Position := 0; SetFileData(Stream.Memory{[0]}, Stream.Size); finally Stream.Free; end; end; |
AW: TFileStream an DLL übergeben
Zitat:
Zitat:
Delphi-Quellcode:
SetFileData(PByte(DeineArrayVariable[0]), Length(DeineArrayVariable));
|
AW: TFileStream an DLL übergeben
Zitat:
Das Position kann man sich sparen, es wird ja nur der Anfang und die Länge übergeben, egal wo der Zeiger im Stream steht. Ciao Stefan |
AW: TFileStream an DLL übergeben
Die Macht der Gewohnheit ;)
|
AW: TFileStream an DLL übergeben
Und nur weil es so im Titel steht.
Man reicht NIEMALS nie keine Delphi-Objekte über Modulgrenzen (DLL oder EXE) hinweg. SharedMemory ginge eventuell noch, aber SharedRTTI/-TypeInfo gibt es eben nicht, außer bei Verwendung von Packages (BPL). |
AW: TFileStream an DLL übergeben
Ich übergebe doch kein Delphi-Objekt (TFilestream oder TMemorystream) an die Dll sondern einen Pointer auf die Daten darin und die Länge der Daten....
Übersehe ich da nun etwas? Oder hätte der Threadtitel nur besser "Inhalt eines TFilestream an Dll übergeben" heissen sollen? Ciao Stefan |
AW: TFileStream an DLL übergeben
Ist das eine Dll von Dir? Dann würde ich den Stream über das IStream-Inteface übergeben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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