Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#35

Re: VerschlüsselungsProgramm

  Alt 21. Jul 2004, 18:37
Die Bereichsüberprüfung, bzw. eben das Rangechecking, sollte man NUR zur Entwicklugszeit aktivieren. In den Finalen Versionen sollte man IMMER ohne Debug/Überlaufprüfungen etc. compilieren.

Da in den meisten Fällen der Rangcheck immer nur dort anschlägt wo man es NICHT möchte aber fast NIEMALS dort anschlägt wo es sinnvoll wäre deaktiviere ich dies Überprüfung in meinen Sourcen von vornherein.

Überläufe selber sind Designtechnische Probleme, d.h. sie können nicht entstehen wenn der Programmierer die richtigen Algorithmen und Datentypen von vornhinein korrekt wählt.

Enstehen diese in meinen Sourcen denoch dann kann ich mit 99.99%'tiger Sicherheit dafon ausgehen das sie erwünscht sind, eben Datentypenabhängige Modulo Operationen.
Bei der Entwicklung vom DEC mit seinen viele verschiedenen Algorithmen die fast ALLE mit solchen 2^(2^x) Modulo-Operationen arbeiten, hatte ich anfangs mit vielen Supportmails zu kämpfen. Ich baute dann eine eigene INCLUDE VER.INC die standardmäßig folgende Switches setzt:

Delphi-Quellcode:
{$A+,B-,E-,F-,G+,H+,I-,J+,K-,N+,P+,Q-,R-,S-,T-,V+,W-,X+,Y-,G+}

{$IFDEF VER80}  { Delphi 1.0     }
  {$DEFINE VER_D1}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER90}  { Delphi 2.0     }
  {$DEFINE VER_D2}
  {$DEFINE VER_D2H}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER100} {Borland Delphi 3.0 }
  {$DEFINE VER_D3}
  {$DEFINE VER_D3H}
  {$DEFINE VER_D2H}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER120} {Borland Delphi 4.0 }
  {$DEFINE VER_D4}
  {$DEFINE VER_D4H}
  {$DEFINE VER_D3H}
  {$DEFINE VER_D2H}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER130} {Borland Delphi 5.0 }
  {$DEFINE VER_D5}
  {$DEFINE VER_D5H}
  {$DEFINE VER_D4H}
  {$DEFINE VER_D3H}
  {$DEFINE VER_D2H}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER140} {Borland Delphi 6.0 }
  {$DEFINE VER_D6}
  {$DEFINE VER_D6H}
  {$DEFINE VER_D5H}
  {$DEFINE VER_D4H}
  {$DEFINE VER_D3H}
  {$DEFINE VER_D2H}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER150} {Borland Delphi 7.0 }
  {$DEFINE VER_D7}
  {$DEFINE VER_D7H}
  {$DEFINE VER_D6H}
  {$DEFINE VER_D5H}
  {$DEFINE VER_D4H}
  {$DEFINE VER_D3H}
  {$DEFINE VER_D2H}
  {$DEFINE VER_D1H}
{$ENDIF}

{$IFDEF VER93}  { Borland C++Builder 1.0 }
  {$DEFINE VER_BCB1}
  {$DEFINE VER_BCB1H}
{$ENDIF}

{$IFDEF VER110} { Borland C++Builder 3.0 }
  {$DEFINE VER_BCB3}
  {$DEFINE VER_BCB3H}
  {$DEFINE VER_BCB1H}
{$ENDIF}

{$IFDEF VER125}
  {$DEFINE VER_BCB4}
  {$DEFINE VER_BCB4H}
  {$DEFINE VER_BCB3H}
  {$DEFINE VER_BCB1H}
{$ENDIF}

{$IFNDEF VER80}           { Delphi 1.0     }
 {$IFNDEF VER90}          { Delphi 2.0     }
  {$IFNDEF VER93}         { C++Builder 1.0 }
    {$DEFINE VER_D3H}     { Delphi 3.0 or higher }
    {$IFNDEF VER100}
      {$DEFINE VER_BCB3H} { C++Builder 3.0 or higher }
      {$IFNDEF VER110}
        {$DEFINE VER_D4H} { Delphi 4.0 or higher }
        {$IFNDEF VER120}
           {$DEFINE VER_D5H}
           {$IFNDEF VER130}
              {$DEFINE VER_D6H}
              {$IFNDEF VER140}
                 {$DEFINE VER_D7H}
              {$ENDIF}
           {$ENDIF}
        {$ENDIF}
      {$ENDIF}
    {$ENDIF}
  {$ENDIF}
 {$ENDIF}
{$ENDIF}

{$IFDEF VER_D7H}
  {$A4} 
  {$WARN UNSAFE_TYPE OFF}
  {$WARN UNSAFE_CODE OFF}
  {$WARN UNSAFE_CAST OFF}
{$ENDIF}
Mit {$I VER.INC} wird dann gleich hinter UNIT XYZ; diese Versions Include eingebunden. Dies hat eben auch den Vorteil das man viel einfacher die verschiedenen Delphi/BCB Compiler erkennen kann.

Delphi-Quellcode:

unit XYZ;

{$I VER.INC}

interface

uses SysUtils;


implementation

const
{$IFDEF VER_D1}
  M1 = 'Delphi Version 1.0';
{$ENDIF}
{$IFDEF VER_D2}
  M1 = 'Delphi Version 2.0';
{$ENDIF}
{$IFDEF VER_D3}
  M1 = 'Delphi Version 3.0';
{$ENDIF}
{$IFDEF VER_D4}
  M1 = 'Delphi Version 4.0';
{$ENDIF}
{$IFDEF VER_D5}
  M1 = 'Delphi Version 5.0';
{$ENDIF}
{$IFDEF VER_D6}
  M1 = 'Delphi Version 6.0';
{$ENDIF}
{$IFDEF VER_D7}
  M1 = 'Delphi Version 7.0';
{$ENDIF}
{$IFDEF VER_D2}
  M1 = 'Delphi Version 2.0';
{$ENDIF}
{$IFDEF VER_D3}
  M1 = 'Delphi Version 3.0';
{$ENDIF}
{$IFDEF VER_D4}
  M1 = 'Delphi Version 4.0';
{$ENDIF}
{$IFDEF VER_D5}
  M1 = 'Delphi Version 5.0';
{$ENDIF}

initialization

  ShowMessage(M1);

{$IFDEF VER_D3H}
  ShowMessage('Delphi Version 3.0 oder höher');
{$ENDIF}  

{$IFNDEF VER_D6H}
  ShowMessage('mindestens Delphi 6.0 wird benötigt');
{$ENDIF}
end.
Gruß Hagen
  Mit Zitat antworten Zitat