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;
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.
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.