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?