Re: Ini-Verschlüsselung mit Class Helper
Zitat:
|
Re: Ini-Verschlüsselung mit Class Helper
Wenn es mit dem Class Helper funktionieren würde, wäre das der einfachste Weg, da dessen Unit nur eingebunden werden muss und die neue Funktionaltität dann in der TIniFile zur Verfügung steht
|
Re: Ini-Verschlüsselung mit Class Helper
Mal hier zum zeigen wozu ein Class helper gut ist.
Ist kopiert deshalb als Zitat. Zitat:
|
Re: Ini-Verschlüsselung mit Class Helper
Hallo CodeX,
vielleicht hast du mit einer shadow class mehr Glück:
Delphi-Quellcode:
Am besten lagerst du Klassendefinition in eine eigene Unit aus. Du musst bei der Verwendung nur darauf achten, dass die neue Unit in der USES-Anweisung nach IniFiles auftaucht - falls du IniFiles überhaupt noch dort aufführen musst.
type
TIniFile = class (IniFiles.TIniFile) public function ReadString (const aSection, aKey, aDefault: string): string; end; function TIniFile.ReadString (const aSection, aKey, aDefault: string): string; begin Result := '<' + inherited ReadString(aSection, aKey, aDefault) + '>'; end; Gruß Hawkeye |
Re: Ini-Verschlüsselung mit Class Helper
Wie gesagt, Class Helper können die Klassen nicht direkt ändern, sondern nur etwas NEUES dazuschmuggeln,
aber hier gibt es einen Trick :angel: Die Unit muß als letzes (nach "IniFiles) dort eingebunden werden, wo die Ini-Klassen erstellt werden. Dann wird TIniFile.Create ersetzt und es werden überall die neuen Funktionen verwendet, da lokal (nachfolgend) immer die letzte Deklaration sichtbar ist und diese Funktionen praktischer Weise virtual sind. :)
Delphi-Quellcode:
Besser wäre es aber, wenn man DIESE TIniFile z.B. in TEncryptedIniFile umbenennt und dann überall TEncryptedIniFile.Create verwendet ... es geht aber auch wie oben, nur so wäre es "übersichtlicher".
unit EncyptedIniFiles;
interface uses IniFiles; type TIniFile = class(IniFiles.TIniFile) function ReadString(const Section, Ident, Default: string): string; override; procedure WriteString(const Section, Ident, Value: String); override; end; implementation function TIniFile.ReadString(const Section, Ident, Default: string): string; begin Result := Decypted(inherited ReadString(Section, Ident, Default)); end; procedure TIniFile.WriteString(const Section, Ident, Value: String); begin inherited WriteString(Section, Ident, Encypted(Value)); end; end. Info: Die "angedeutete" Verschlüsselung muß aber noch "eingebaut" werden. [edit] och menno :cry: |
Re: Ini-Verschlüsselung mit Class Helper
Ähm, was genau ist jetzt der Vorteil einer Shadow Class zu einem Class Helper?
Wie bereits geschrieben, wird auch bei einem Class Helper eine eigene gleichnamige Funktion bevorzugt behandelt, falls vorhanden. Das ist praktisch ein Überschreiben. Ich hab das ja wie gesagt schon eingebaut und es funktioniert. Die Info, dass das so geht, hatte ich ursprünglich von hier: http://www.delphi-treff.de/sprachen/...helferklassen/ |
Re: Ini-Verschlüsselung mit Class Helper
Zitat:
|
Re: Ini-Verschlüsselung mit Class Helper
Zitat:
|
Re: Ini-Verschlüsselung mit Class Helper
Mit Class-Helpern kann man eine Klasse nachträglich um neue Funktionen erweitern, ohne die Implementation der Klasse zu verändern.
Dießes bedeutet aber, daß man keine Funktionen/Prozeduren überschreiben und auch keine neuen Klassenvariablen einbauen kann, denn dieses würde die Klasse ändern, was ja nicht geht. Da du aber eine Funktion (hier ReadString) ersetzen willst, dann geht das also nicht. Du könntest höchstens die Funktion überladen, also eine gleichnamige neue Funktion einbinden, welche aber, wie beim Überladen üblich, eine andere Signatur haben muß. |
Re: Ini-Verschlüsselung mit Class Helper
@Frank: Es scheint ja komischerweise zu funktionieren, obwohl es in der Theorie nicht funktionieren dürfte
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz