Hallo himitsu,
Zitat von
himitsu:
Mir ist nix bekannt, warum 'Z' nicht gehn sollte.
Das müßte auch gehn,
Delphi-Quellcode:
uses ...
{$if CompilerVersion >= 20.0}, AnsiStrings
{$IFEND};
class function TDECObject.Identity: LongWord;
var
Signature: AnsiString;
// using ANSI to keep backward compatibility
begin
// create signature ('Z' * n + 'TDECCLASSNAME')
Signature := StringOfChar('
Z', 256 - Length(Classname))
+ UpperCase(AnsiString(ClassName));
// calc crc for signature
Result := CRC32(IdentityBase, Signature[1], Length(Signature));
end;
Richtig, ist aber faktisch kein Unterschied und man spart nur ein AnsiChar() - dafür muß man aber IFDEFen und eine weitere
Unit einbinden.
Zitat von
himitsu:
wobei es so wohl korrekter wäre
Delphi-Quellcode:
uses ...
{$IF CompilerVersion >= 20.0}, AnsiStrings
{$IFEND};
class function TDECObject.Identity: LongWord;
var
Signature: AnsiString;
// using ANSI to keep backward compatibility
begin
// create signature ('Z' * n + 'TDECCLASSNAME')
Signature := StringOfChar('
Z', 256 - Length(Classname))
{$IF CompilerVersion >= 20.0}
+ UpperCase(UTF8Encode(ClassName));
{$ELSE}
+ UpperCase(ClassName);
{$IFEND}
// calc crc for signature
Result := CRC32(IdentityBase, Signature[1], Length(Signature));
end;
PS: AnsiStrings muß natürlich die letze
Unit sein, bzw. zumindestens nach SysUtils stehen.
Jein. UTF8Encode könnte ja theoretisch den Wert ändern - es geht ja gerade darum, diesen in allen Delphis absolut identisch zu haben. Wobei bei UTF8Encode der
ASCII Bereich ja kein Problem darstellt...
Zitat von
himitsu:
Warum Emba aber auch soein krankes Spiel mit den AnsiVersionen und mit den Namen der UnicodeVersionen spielen mußte.
function AnsiUpperCase(const S: string): string; ist doch wohl das Krankeste.
Und ich weiß grade nicht, ob im
DEC eine *.INC für die CompilerVersionen enthalten ist.
Jaja, die
Unicode Umstellung war schon was tolles. Und die ganzen halbherzigen Komponenten Portierungen auch (wo nur String > AnsiString und Char > AnsiChar geändert wurde)
Jup, im neuen
DEC 5.3 kommt ein Include was automatisch für alte, jetzige und neue Versionen stimmt. Ist schon fertig.
Gruß,
Assertor