Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HELP - Erreur de vérification d'étendue ? - URGENT sous Delphi 3

320 views
Skip to first unread message

Michaël Duval

unread,
Oct 7, 2000, 3:00:00 AM10/7/00
to
Bonjour à tous

J'ai fait un projet sous Delphi 3 utilisant des tables sous Paradox et
depuis plusieurs mois cela marche trés bien.

Le probléme est que depuis que j'ai changé le numéro de version du projet,
j'ai ce message d'erreur qui survient dans cette ligne de code :

unit MesFonc;

interface

function Decrypt(const S: String; Key: Word): String;
function Encrypt(const S: String; Key: Word): String;

implementation

uses windows;

const
C1 = 52845;
C2 = 22719;

{Dans les 2 fonctions suivantes, Key est une valeur indiquée par le
programmeur
elle doit être identique pour le cryptage et le décryptage d'un même mot}

function Encrypt(const S: String; Key: Word): String;
var
I: byte;
begin
result := S;
for I := 0 to Length(S) do begin
result[I] := char(byte(S[I]) xor (Key shr 8));
Key := (byte(result[I]) + Key) * C1 + C2;
end;
end;

function Decrypt(const S: String; Key: Word): String;
var
I: byte;
begin
Result := S;
for I := 0 to Length(S) do begin
Result[I] := char(byte(S[I]) xor (Key shr 8));
Key := (byte(S[I]) + Key) * C1 + C2; ERREUR SUR CETTE LIGNE EN PAS
A PAS !
end;
end;

end.


Ce code ne sert pour décoder le mots de passe, stocké dans une Base de
donnée, à l'entrée de mon appli.

Dans l'aide, il me dit :

ERangeError n'est déclenchée que si les vérifications d'intervalle sont
activées. Pour activer les vérifications d'intervalle, incluez la directive
de compilation $R+ dans le code source du projet, ou sélectionnez la
commande Options|Projet, choisissez l'onglet Pascal et activez la case à
cocher Vérification des limites de la boîte de dialogue.

Mais où dois-je mettre $R+ ? et qu'est ce que c'est que cela ?

Sinon, j'ai cocher "Vérification des limites" mais l'erreur est toujours
présentes.

Je ne sais plus quoi y faire !

Est ce que quelqu'un à une idée, ais-je fait une erreur ?

Merci de votre coup de main.
C'est assez Urgent !
m-d...@club-internet.fr

Mickey

Eric Rossé

unread,
Oct 7, 2000, 3:00:00 AM10/7/00
to
Le Sat, 7 Oct 2000 11:54:38 +0200, "Michaël Duval" <m-d...@club-internet.fr> écrivait:

>function Decrypt(const S: String; Key: Word): String;

>[...]


> Key := (byte(S[I]) + Key) * C1 + C2; ERREUR SUR CETTE LIGNE EN PAS

>[...]

Si tu as une erreur, c'est que ton calcul dépasse la capacité permise de la variable
destinatrice, autrement dit que le calcul ci-dessus donne une valeur superieure à
65536, qui est le maximum stockable dans un word.
Donc,
- ou tu utilises des types autorisant des valeurs plus importantes (longint, par
exemple),
- ou tu désactives la vérification d'étendue (soit en décochant la case dans les options de
compilation, soit {$R-} en tête de programme, ou localement (ce qui permet de le réactiver
immédiatement après)
- ou tu tronques sciemment la valeur (à l'aide d'un modulo, par exemple).


Michaël Duval

unread,
Oct 7, 2000, 3:00:00 AM10/7/00
to
Super, j'ai mis {$R-} localement dans le code, et j'ai eu le msg
débordements d'entier, j'ai recherché le probléme, et j'ai compris...j'ai
mis aussi {$Q-} dans le code, et cela marche à merveille !

Merci beaucoup.

@ bientôt!

Mickey

Eric Rossé <ro...@micronet.fr> a écrit dans le message :
87huts80mdlo3up4f...@4ax.com...

0 new messages