![]() |
Ini-Verschlüsselung mit Class Helper
Vorab: Ich habe vor diesem Posting viel gesucht und nachgelesen. Und nein, ich habe keine passende Antwort gefunden.
Ich möchte ein gegebenes, größeres Projekt so erweitern, dass die geschriebenen Werte in eine Ini verschlüsselt abgelegt und gelesen werden können. TIniFile ableiten und entsprechende Zusatzfunktionen einbauen würde Unmengen an Änderungen am bestehenden Code mit sich bringen. Das ist nicht gewünscht. Das bedeutet, dass weiterhin ganz normal z.B. per
Delphi-Quellcode:
ein String ausgelesen werden können soll. Nur eben beim Lesen entschlüsselt.
var ini: TIniFile;
begin ini := TIniFile.Create(IniName); try myString := ini.ReadString('Section','Ident',''); finally ini.Free; end; Wie lässt sich das nun umsetzen? Meinde Idee war einen Klassenhelfer zu verwenden. Da ich bislang noch nicht damit gearbeitet habe, stolpere ich damit durch die Gegend. Ich dachte, das ginge jetzt so in der Art:
Delphi-Quellcode:
Überschrieben wird das damit schonmal, aber das Erben der normalen Funktionalität klappt nicht. Ginge das, könnte ich an Stelle des Kommentars die Funktion erweitern.
type
TIniFileHelper = class helper for TIniFile function ReadString(const Section, Ident, Default: string): string; end; implementation function TIniFileHelper.ReadString(const Section, Ident, Default: string): string; begin //hier später die Entschlüsselung inherited; end; Wie also statt des "inherited" Versuchs richtig? |
Re: Ini-Verschlüsselung mit Class Helper
Delphi-Quellcode:
type
TIniFileHelper = class(TIniFile) function ReadString(const Section, Ident, Default: string): string; override; end; : : : function TIniFileHelper.ReadString(const Section, Ident, Default: string): string; begin Result:=inherited ReadString(Section, Ident, Default); end; |
Re: Ini-Verschlüsselung mit Class Helper
Wow, das ging ja schnell!
Also das override wollte er nicht:
Code:
Nicht schlimm, wenn ich das weglasse, oder?
E2137 Methode 'ReadString' nicht in Basisklasse gefunden
Aber die Result-Zuweisung war scheinbar genau richtig. Klappt wie es soll. Danke! |
Re: Ini-Verschlüsselung mit Class Helper
Hallo zusammen,
mal vielleicht eine ganz dumme Frage, warum über eine Helper Klasse ? Ich kann das ganze doch auch so machen :
Delphi-Quellcode:
Warum sollte ich den Umständlichen Weg über eine extra Klasse gehen ? Welche Vorteile und Nachteile hat die Klasse gegenüber meiner Variante ?
ini := TINIFile(NSFile);
try Passwort := Entschluesseln(ReadString('Section', 'Ident', 'Default')); { ... Hier passiert noch etwas mit dem Passwort ...} finally ini.free; end; |
Re: Ini-Verschlüsselung mit Class Helper
Wenn man den ver/entschlüsselten Wert nur ein Mal auslesen möchte, dann geht Deine Variante natürlich auch.
Brauchst Du das an hundert Stellen, musst Du alle hundert Stellen anpassen. Mache ich das über die Helper-Klasse, brauche ich es nur ein Mal machen und mir in Zukunft keine Gedanken drüber zu machen. |
Re: Ini-Verschlüsselung mit Class Helper
Ein Class Helper ersetzt kein Veerbung. Man kann eine Klasse erweitern aber keine vorhandenen Funktionen verdecken
|
Re: Ini-Verschlüsselung mit Class Helper
Formel gesehen werden wohl tatsächlich keine Funktionen überschrieben. Aber praktisch gesehen schon.
Ich gebe zu, eine Vererbung oder Änderung des Originalquellcodes wären sauberer, aber auf diese Weise kann die Änderung "aufgesetzt" werden, ohne die Original-Funktionen oder den bereits gegebenen Quellcode anzurühren. Genau das war ja meine Frage und omata hat ja die Lösung bereits gepostet. Ich habe im Anschluss ein wenig weitergebastelt und bin mit der Lösung zufrieden. |
Re: Ini-Verschlüsselung mit Class Helper
Zitat:
|
Re: Ini-Verschlüsselung mit Class Helper
Er meint wenn er hundert Werte hat, also 100 mal ini.ReadString() aufruft, muss er alle 100 Aufrufe entsprechend erweitern. Nimmt er einen Class Helper oder leitet eine eigene Klasse ab, welche das Entschlüsseln in ReadString() implementiert ist es einfacher.
|
Re: Ini-Verschlüsselung mit Class Helper
Mir war aber so, als wenn man mit den ClassHelpern nur erweitern kann, ABER nichts überschreiben,
also müßte er vermutlich seine Funktion ReadString anders nennen und überall die "neue" Funktion direkt aufrufen :gruebel: Schließlich geht Overload NUR (egal wo), wenn sich die Funktions-Signatur (Parameter) unterscheidet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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 by Thomas Breitkreuz