AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TMemoryStream - DLL (delphi/Lazarus)

Ein Thema von _frank_ · begonnen am 25. Nov 2006 · letzter Beitrag vom 26. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#1

TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 14:00
Hi,
weis jemand, wie man einen TMemoryStream (oder etwas vergleichbares) vom (Delphi-) Hauptprogramm an eine Dll (Delphi+Lazarus) geben kann und wieder zurück?

Ich denke mal PChar ist das nicht die richtige Wahl, da in der Binärvariante evtl. auch #0-Zeichen vorkommen.
weiterhin möchte ich vermeiden, eine temporäre Datei zu schreiben (wenn möglich).

Sinn und Zweck der Sache soll sein, dass ich die Binärform-Dekodierung (ObjectBinaryToText, ObjectTextToBinary) in Dlls auslagere um z.B. auch forms aus Lazarus-exen bzw. neuerer Delphi-Versionen zu importieren.

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 14:07
ein einfacher Pointer mit Längenangabe sollte reischen. Der einfache Pointer kann natürlich auch ein PChar sein.
Wenn du einen TMemoryStream hast kannst du als Pointer gleich "MemoryStream.Memory" übergeben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#3

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 14:12
mhm...ist halt die frage, ob delphis TMemoryStream gleich dem von Lazarus ist...
stehen in TMemoryStream.Memory wirklich nur meine Daten ohne Header etc?
Wenn dem so ist, sollte es funktionieren...

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 14:16
TMemoryStream.Memory ist einfach nur ein einfacher Pointer welcher auf die Daten zeigt welche im Memorystream stehen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#5

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 19:00
so mein erster versuch, jedoch bekomme ich die daten nicht zurück, damit ich den stream in der dll freigeben kann...

Delphi-Quellcode:
function oBinaryToText(InData:Pointer;inLen:integer;OutData:Pointer;var outLen:integer):boolean;
var ms,ms2:TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  ms.ReadBuffer(inData,inLen);//sollte so funktionieren, denk ich
  ms.Position:=0;
  ms2:=TMemoryStream.Create;
  ObjectBinaryToText(ms,ms2);
  ms2.Position:=0;
  //wie ms2.memory in die hauptanwendung bekommen??
  ms2.free;
  ms.free;
  result:=true;
end;
eine idee?

//edit: gibt es eine möglichkeit á la initialization/finalization um den speicher beim dll-unload aufzuräumen?

Frank
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 20:01
du kannst indirekt auch in DLL's Initialization und Finalization ohne größere Probleme errischen. Erstelle einfach eine neue Unit und binde diese in die DLL-Project-Datei ein. In dieser Unit kannst du ohne Probleme Initialization und Finalization einbaune. Zudem ist die Projektdatei aufgeräumt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 20:18
ist das so möglich eine globale stream-variable zu erstellen (initialization) und diese im finalization freizugeben, dazwischen nur mit pointer mit dem hauptprogramm zu kommunizieren?
oder gibt es da evtl. bessere Möglichkeiten?

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 20:20
eine bessere möglichkeit wenn das Hauptprogramm eine Funktion der DLl aufruft welche den Stream erstellt und das Hauptprogramm auch eine Funktion aufruft die den Stream wieder zerstört.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 20:36
Zitat von _frank_:
mhm...ist halt die frage, ob delphis TMemoryStream gleich dem von Lazarus ist...
stehen in TMemoryStream.Memory wirklich nur meine Daten ohne Header etc?
Wenn dem so ist, sollte es funktionieren...
"Lebende" Objekte zwischen DLL und Exe auszutauchen funktioniert nur wenn mit Laufzeitpackages gearbeitet wird. Ansonsten hast Du zwei völlig unabhänige Klassenbibliotheken und jeder Objektaustausch ist ein Glücksspiel.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TMemoryStream - DLL (delphi/Lazarus)

  Alt 25. Nov 2006, 20:47
Es wird nur ein Pointer auf einen Speicherbereich ausgetauscht, bernhard geyer.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:45 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