Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Streams zwischen Dll und Programmen versch. Progsprachen (https://www.delphipraxis.net/98670-streams-zwischen-dll-und-programmen-versch-progsprachen.html)

F.W. 30. Aug 2007 17:17


Streams zwischen Dll und Programmen versch. Progsprachen
 
Hallo Leute!

Ich plane mir ein eigenes kleines Archivdateisystem zu schreiben, welches auf meinem USB-Stick die kleinen Dateien zu einer großen zusammenfassen soll. Nun möchte ich dieses Archivdateisystem aber vlt auch in anderen Programmen nutzen, ist ja vielseitig einsetzbar.
Ich habe ähnliches auch schon einmal mit Streams probiert und es hat funktioniert, aber das war nur in EINEM Programm. Nun möchte ich den Zugriff auf die Archivdatei über eine Dll abwickeln um aus verschiedenen Programm (die evtl. auch von anderen Programmiersprachen kommen sollen) darauf zugreifen zu können.

Die Frage ist nur wie ich das bewerkstellige. Wenn ein Programm eine Datei aus dem Archiv auf der Festplatte ablegen will ist das ja kein Problem, da kann ja die Dll einen FileStream zum Speichern nehmen. Was aber wenn das Programm den Streaminhalt direkt ohne Zwischenspeicherung haben möchte?Bsp. ein langes Musikstück direkt abspielen möchte?

In diesem Thread wurde schonmal auf so etwas eingegangen. Jedoch gibt mir das keine klare Lösung.

Schlagworte aus der Hilfe sind für mich bisher:
TMemoryStream.Memory und
THandleStream

Der HandleStream scheint ja eine Programmiersprachenübergreifende Lösung zu sein, jedoch geht das scheinbar (AFAIK) nur mit Dateien von der HDD.
MemoryStream als Pointer übergeben scheidet schon aus weil es in C++ sicher keine gleichbedeutende Datenstruktur gibt oder? (höchstens vlt. in Borland C++? aber das würde mir nicht reichen)

Wenn ich die Memory-Eigenschaft nutzen würde, müsste ich vom Archiv Filestream mit Hilfe eines Memorystreams eine Kopie erstellen und dort den Pointer auf Memory übergeben, aber ist das eine Gute Lösung?

Ich hoffe die Masse an Text hat nicht alle verschreckt, ihr sollt nur wissen, dass ich schon was gemacht hab und nicht euch alles erarbeiten lassen will! Ich hoffe mir kann jemand Vor- und Nachteile und evtl. andere Wege dafür nennen!

Danke!

shmia 30. Aug 2007 17:42

Re: Streams zwischen Dll und Programmen versch. Progsprachen
 
Da wäre wohl Named Pipes das richtige.
Leider ist die API dazu etwas kompliziert.
Sobald du aber das Handle der Pipe hast, kannst du mit THandleStream damit arbeiten, als ob es eine Datei wäre.
Allerdings kann man die Position nicht verändern (bzw. Seek ist nicht möglich).
Named Pipes funktioneren auch über das Netzwerk zwischen verschiedenen Rechnern.

F.W. 30. Aug 2007 21:58

Re: Streams zwischen Dll und Programmen versch. Progsprachen
 
Ich hab jetzt in der DelphiPraxis nur mal so gesucht und es mal bei Wikipedia eingegeben. - Gibt's auch irgendwo direkt ne Anleitung, n Tutorial wo es einem erklärt wird? Ich hab noch ne bei MSDN geschaut, ich find mich in diese Suchfunktion da ne rein ^^

Mir gehts im Endeffekt ja nur darum, dass ich ne so viel Speicherplatz verbrauchen will. Und bei größeren Dateien z.B. nur mal 100MB wären ja schon reichlich, wenn ich mir folgendes Szenario vorstelle:
v FileStream - Archivdatei auf der Festplatte
v MemoryStream - kopiert 100 MB aus der Datei in den Speicher
v MemoryStream.Memory - Fremde Anwendung kopiert sich die Datei in ihren Speicher
v in MemoryStream - die fremde Anwendung (jetzt mal Delphi) muss um mit dem Pointer arbeiten zu können sicher wieder ein Schreiben in NOCH einen neuen MemoryStream vornehmen
v Lassen wir die Datei mal ein BMP mit sehr hoher Auflösung sein (wie es bei Siedler III dem Karteneditor manchmal zu verdanken war) - lädt man das Bild in ein TBitmap hat man nochmal die 100 MB im Bitmap

Berichtigt mich, das ist jetzt so der Horrorweg, den ich mir jetzt vorstelle. Nach dieser Rechnung hätte diese Operation allein 400 MB gekostet, nur im Speicher!

Ich will ja nur minimal den Speicher ausnutzen

F.W. 2. Sep 2007 23:54

Re: Streams zwischen Dll und Programmen versch. Progsprachen
 
Hat denn noch nie jemand aus einem Stream gelesen ohne dabei die Streamvariable ansprechen zu können?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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