AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ini-Verschlüsselung mit Class Helper

Ein Thema von CodeX · begonnen am 23. Sep 2009 · letzter Beitrag vom 24. Sep 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#11

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 07:30
Zitat von mkinzler:
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.
Ok, habe ich soweit verstanden. Aber aus meinem Verständnis raus, müsste ich doch dann von der Klasse TIniFile ableiten oder nicht ? Das wäre doch eigentlich der saubere Weg oder nicht ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 07:35
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
Markus Kinzler
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 07:36
Mal hier zum zeigen wozu ein Class helper gut ist.
Ist kopiert deshalb als Zitat.

Zitat:
Here's an example (no implementations, only class definition / method interface):

Delphi-Quellcode:
TTest = class
   procedure SomeProc;
end;
...

TTestHelper = class helper for TTest
   function SomeFunc : string;
end;
With the above class definitions, we can use the next code:

Delphi-Quellcode:
var
   t:TTest;
begin
  t:=TTest.Create;
  t.SomeFunc ;
...
even though SomeFunc was *not* defined in class TTest!
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 07:54
Hallo CodeX,

vielleicht hast du mit einer shadow class mehr Glück:

Delphi-Quellcode:
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;
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.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#15

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 08:00
Wie gesagt, Class Helper können die Klassen nicht direkt ändern, sondern nur etwas NEUES dazuschmuggeln,

aber hier gibt es einen Trick

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:
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.
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".


Info: Die "angedeutete" Verschlüsselung muß aber noch "eingebaut" werden.

[edit]
och menno
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#16

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 12:03
Ä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/
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 12:07
Zitat:
Ähm, was genau ist jetzt der Vorteil einer Shadow Class zu einem Class Helper?
Ein Class Helper erweitert eine Klasse. Im anderen Fall sind es 2 Klassen, wobei nicht die Methode, sondern die Klasse verdeckt wird. Hat den Vorteil echte OOP zu sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#18

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 12:08
Zitat von CodeX:
Wie bereits geschrieben, wird auch bei einem Class Helper eine eigene gleichnamige Funktion bevorzugt behandelt, falls vorhanden. Das ist praktisch ein Überschreiben.
Bei deinem Class-Helper wird jeder Aufruf von ReadString auf die Helper-Methode umgeleitet. Die Aufrufe von ReadString innerhalb der Implementation von TIniFile (z.B. bei ReadInteger) landen aber weiterhin bei der Original-Routine. Bei der Shadow-Class wird auch hier die überschriebene Methode aufgerufen.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#19

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 12:12
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ß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Ini-Verschlüsselung mit Class Helper

  Alt 24. Sep 2009, 12:13
@Frank: Es scheint ja komischerweise zu funktionieren, obwohl es in der Theorie nicht funktionieren dürfte
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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