AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Streams zwischen Dll und Programmen versch. Progsprachen
Thema durchsuchen
Ansicht
Themen-Optionen

Streams zwischen Dll und Programmen versch. Progsprachen

Ein Thema von F.W. · begonnen am 30. Aug 2007 · letzter Beitrag vom 3. Sep 2007
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Streams zwischen Dll und Programmen versch. Progsprachen

  Alt 30. Aug 2007, 18:17
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!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Streams zwischen Dll und Programmen versch. Progsprachen

  Alt 30. Aug 2007, 18:42
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#3

Re: Streams zwischen Dll und Programmen versch. Progsprachen

  Alt 30. Aug 2007, 22:58
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
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#4

Re: Streams zwischen Dll und Programmen versch. Progsprachen

  Alt 3. Sep 2007, 00:54
Hat denn noch nie jemand aus einem Stream gelesen ohne dabei die Streamvariable ansprechen zu können?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz