![]() |
[done] DEC class xy not found
Hatte folgende Fehlermeldung vom DEC 5.2 nach dem Umstieg auf Delphi 2010: "class xy not found"
die Lösung (hier fett) lautet: class function TDECObject.Identity: LongWord; var Signature: {$IFDEF UNICODE}AnsiString{$ELSE}String{$ENDIF}; begin Signature := StringOfChar(#$5A, 256 - Length(Classname)) + UpperCase(ClassName); //° Result := CRC32(IdentityBase, Signature[1], Length(Signature) * SizeOf(Signature[1])); end; man korrigiere mich bitte falls ich falsch liege. |
Re: [done] DEC class xy not found
die/eine Lösung lautet nur
Zitat:
Aber ich war mir sicher, daß es hier auch irgendwo schon eine unicodefähige Version (D2009+) des DEC gibt. aber eigentlich sieht es so aus, als wenn hier schon alles OK so war? :gruebel:
Code:
Result := CRC32(IdentityBase, Signature[1], Length(Signature) * [color=#ff0000]SizeOf(Signature[1])[/color]);
|
Re: [done] DEC class xy not found
ich habe diese Funktion jeweils unter D2006 und D2010 getestet und das Result waren jeweils unterschiedliche ID's - entsprechend konnte die Klasse natürlich nicht mehr gefunden werden
Zitat:
|
Re: [done] DEC class xy not found
Daß es so unterschiedliche IDs ergibt, das ist schon klar, da die UnicodeDaten ja andere sind.
Aber dennoch sollte es funktionieren ... nur eben nicht Systemübergreifend :roll: hmmmm ... also, da ClassName unter D2009+ auch Unicode ist und dies hier verwendeten Stringfunktionen auch, könnte es Probleme geben. Aber wenn (da) der Klassenname nichts Exotisches ist, sollte es dennoch klappen (trotz der Unicode-Ansi-Umwandlung.
Delphi-Quellcode:
sollte da vermutlich also schon ausreichen.
Signature: AnsiString;
|
Re: [done] DEC class xy not found
ja, so funktionierts:
Delphi-Quellcode:
thx
class function TDECObject.Identity: LongWord;
var Signature: AnsiString; begin Signature := StringOfChar(#$5A, 256 - Length(Classname)) + UpperCase(ClassName); //° Result := CRC32(IdentityBase, Signature[1], Length(Signature) * SizeOf(Signature[1])); end; |
Re: [done] DEC class xy not found
Hallo heri,
Zitat:
Ich arbeite gerade an der DEC 5.3, die Änderungen werde ich für Abwärtskompatibilität gerne übernehmen. Gruß, Assertor |
Re: [done] DEC class xy not found
Warum eigentlich #$5A und nicht einfach 'Z' ?
|
Re: [done] DEC class xy not found
Zitat:
In der nächsten DEC wird es so gelöst:
Delphi-Quellcode:
Gruß,
class function TDECObject.Identity: LongWord;
var Signature: AnsiString; // using ANSI to keep backward compatibility begin // create signature ('Z' * n + 'TDECCLASSNAME') Signature := StringOfChar(AnsiChar(#$5A), 256 - Length(Classname)) + AnsiString(UpperCase(ClassName)); // calc crc for signature Result := CRC32(IdentityBase, Signature[1], Length(Signature)); end; Assertor |
Re: [done] DEC class xy not found
Mir ist nix bekannt, warum 'Z' nicht gehn sollte. :gruebel:
Das müßte auch gehn,
Delphi-Quellcode:
wobei es so wohl korrekter wäre
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;
Delphi-Quellcode:
PS: AnsiStrings muß natürlich die letze Unit sein, bzw. zumindestens nach SysUtils stehen.
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; 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. |
Re: [done] DEC class xy not found
Hallo himitsu,
Zitat:
Zitat:
Zitat:
Jup, im neuen DEC 5.3 kommt ein Include was automatisch für alte, jetzige und neue Versionen stimmt. Ist schon fertig. Gruß, Assertor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz