 |
| |
|
|
 |
Autor |
Nachricht |
 |
| |
| Artur |
#1| Verfasst am: 07.02.2010, 16:02 Titel: Fehler in der Bereichsprüfung bei Rave 8.01 |
 |
 |
 |
|
Mitglied Alter: 40 Status: offline Beiträge: 56 angemeldet: 31.12.2006 Wohnort: Augsburg Delphi 2007 Professional

|
Hallo,
ich habe ein Problem bei Rave 8.01 in der Unit RvUtils.
Schalte ich die Bereichsprüfung ein, meckert er.
Bei Stream.Read knallt es.
Delphi-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 26
| {$IFDEF UNICODE}
if Len = UnicodeMarker then begin
// Read the unicode version
CodePage := ReadIndex;
if CodePage = DefaultUnicodeCodePage then begin
Encoding := TEncoding.Unicode;
end else begin
Encoding := TEncoding.GetEncoding(CodePage);
end;
Len := ReadIndex;
SetLength(Data, Len);
Stream.Read(Data[0], Len);
Value := Encoding.GetString(Data);
// Skip past the ANSI version
Len := ReadIndex;
Stream.Seek(Len, soFromCurrent);
end else begin
SetLength(S1, Len);
Read(@S1[1], Len);
Value := string(S1);
end;
{$ELSE}
SetLength(Value,Len);
Read(@Value[1],Len);
{$ENDIF} |
|
Und das selbe Spiel gibt es ein zweites Mal beim Schreiben:
Delphi-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 · · · · 30
| {$IFDEF UNICODE}
// If unicode chars included then write out unicode value first with unicode marker, then write out plain text
if StringCodePage(Value) <> CP_ACP then begin
// Write unicode value first
if StringCodePage(Value) = DefaultUnicodeCodePage then begin
Encoding := TEncoding.Unicode;
end else begin
Encoding := TEncoding.GetEncoding(StringCodePage(Value));
end;
WriteIndex(UnicodeMarker);
WriteIndex(StringCodePage(Value));
Data := Encoding.GetBytes(Value);
WriteIndex(Length(Data));
Stream.Write(Data[0], Length(Data));
end;
// Convert unicode string to ANSI equivalent for non-unicode
S1 := AnsiString(Value);
WriteIndex(Length(S1));
if Value <> '' then begin
Write(@S1[1], Length(S1));
end;
{$ELSE}
WriteIndex(Length(Value));
if Value <> '' then begin
Write(@Value[1],Length(Value));
end; { if }
{$ENDIF} |
|
Was kann man da machen?
Ciao,
Artur |
|
 |
|
|
|
| |
| omata |
#2| Verfasst am: 07.02.2010, 17:45 Titel: Re: Fehler in der Bereichsprüfung bei Rave 8.01 |
 |
 |
 |
|
sehr aktives Mitglied Status: offline Beiträge: 2.666 angemeldet: 26.08.2004 Wohnort: Wedel Delphi 7 Enterprise

|
Welche Zeile?
Du kannst aber auch Rave ohne Bereichsprüfung kompilieren und dann die DCUs Delphi zugänglich machen. Dann werden die Quellen nicht nochmal neu kompiliert und es kommt auch kein Fehler.
Schöner ist es natürlich den Fehler zu beseitigen. |
|
 |
|
|
|
| |
| Artur |
#3| Verfasst am: 08.02.2010, 05:46 Titel: Re: Fehler in der Bereichsprüfung bei Rave 8.01 |
 |
 |
 |
|
Mitglied Alter: 40 Status: offline Beiträge: 56 angemeldet: 31.12.2006 Wohnort: Augsburg Delphi 2007 Professional

|
Hi omata,
bei den beiden Stream Befehlen (Stream.Read(Data[0], Len); und Stream.Write(Data[0], Length(Data)); ) kommt der Bereichsüberlauf.
Ciao,
Artur |
|
 |
|
|
|
| |
| sx2008 |
#4| Verfasst am: 08.02.2010, 09:57 Titel: Re: Fehler in der Bereichsprüfung bei Rave 8.01 |
 |
 |
 |
|
aktives Mitglied Status: offline Beiträge: 869 angemeldet: 16.02.2008 Delphi 2007 Professional

|
Welchen Datentyp hat "data" und welche konkrete Klasse hat "stream"? (Breakpoint setzen und stream.classname anzeigen)
Und eigentlich müsste .ReadBuffer() anstelle .read() verwendet werden, da das Ergebnis von .read() nicht ausgewertet wird. |
|
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|
| |
|
Du darfst keine Beiträge in dieses Forum schreiben. Du darfst auf Beiträge in diesem Forum nicht antworten. Du darfst Deine Beiträge in diesem Forum nicht bearbeiten. Du darfst Deine Beiträge in diesem Forum nicht löschen. Du darfst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten. Du kannst Dateien in diesem Forum nicht herunterladen.
|
|
 |