Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#10

Re: [done] DEC class xy not found

  Alt 11. Mai 2010, 16:38
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
Frederik
  Mit Zitat antworten Zitat