Einzelnen Beitrag anzeigen

Benutzerbild von F.W.
F.W.

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

Re: Aus DLL auf Prgramm zugreifen

  Alt 22. Okt 2006, 02:28
Guten morgen alle Früh-aufsteher oder Spät-ins-Bett-geher

Ich hätte nicht geglaubt, dass ich zu meinem heutigen Problem was in der Suche finde (ich tu mich irgendwie mit der Bezeichnung meiner Probleme schwer, oder mit den Schlagworten in der Suche). Aber ich hab was gefunden, und nicht irgendeinen Beitrag, sondern gerade auch noch einen von mir selbst

Problem: In diesem Posting bin ich speziell über folgende Zeilen gestolpert:
Delphi-Quellcode:
procedure GetMsg(RE: TRichEdit; MainForm: TForm; St: TStream);
 { ... }
 St.Seek(0, soFromBeginning); //<- Die Zeile macht er immer ohne Probleme
 St.ReadBuffer(Kennung, 1); //<- Diese Zeile macht er nicht mehr, aber er zeigt keinen Fehler an!
Das ist die Stelle mit der ich mein jetziges Problem mit diesem Thread verbinde! Bloß dass der Dll jetzt mal keine Beachtung geschenkt werden soll.

Ich arbeite in einer Procedure mit einem TFileStream. Zwischendurch soll ein Position in ihm gesucht werden, da das auch an anderen Stellen des Programms geschieht, ist der Teil in einer Funktion ausgelagert, dem der Stream als Parameter übergeben wird.
Nach dem Aufruf der Funktion ist mein Stream aber weg oder was auch immer ??

Mal Stückchen Quellcode:
Delphi-Quellcode:
//soviel zum Aufruf:
var
 FS: TFileStream;
begin
   if GetStartDataPosition(FS) = -1 then begin

//...


//das ist die aufgerufene Funktion:
function TMainForm.GetStartDataPosition(S: TFileStream): Integer;
var
 Buffer: String;
begin
 Result := -1;

//schauen ob [ENDE] als letztes im Stream steht
 S.Seek(-Length(EndString), soFromEnd);
 SetLength(Buffer, Length(EndString));
 S.ReadBuffer(Buffer, Length(EndString));// << böse Stelle <<

 // ...
end;
Ich habe mal etwas probiert:
Wenn in der Funktion nur S.Seek drinsteht, geht nachher noch alles.
Sobald ich aber S.ReadBuffer ausführe kann ich mit FS (von oben, in der aufrufenden Procedure) nicht mehr weiterarbeiten. Das lustige dabei ist aber, innerhalb von GetStartDataPosition kann ich nach S.ReadBuffer noch arbeiten

Kann mir das jemand erklären warum das so ist und was man dagegen machen kann?
  Mit Zitat antworten Zitat