Problema com função no delphi 2010
estou migrando alguns sistema na empresa onde trabalho para o delphi 2010, só que logo de cara
tive um problema com essa função:
quando eu chamo ela com
ela deveria me rertornar 04, no delphi 7
só que não é isso que ocorre
tive um problema com essa função:
function DecodificaMsg(Msg1: string; DecryptNo: integer): string; var ResultStr: string; Temp, nMsg: char; I, DecryptIndex, nIndex: integer; begin ResultStr := ''; Temp := ' '; for i := 1 to length(Msg1) do begin nMsg := Msg1[i]; for DecryptIndex := 1 to DecryptNo do begin nMsg := Pred(nMsg); //Msg1[I] := Temp; nIndex := DecryptIndex; end; ResultStr := ResultStr + nMsg; end; DecodificaMsg := ResultStr; end;
quando eu chamo ela com
DecodificaMsg('jn', 570)ela deveria me rertornar 04, no delphi 7
só que não é isso que ocorre
Nicassio
Curtidas 0
Respostas
Wesley Batista
28/04/2010
Olá amigo, peguei tua função rodei no meu delphi 2010, e funcionou, sua instalação do Delphi esta legal? Você notou algum bug ? Fez Update ?
Manda o erro por completo para analisar melhor
Espero te ajudado
Um abraço
Wesley Batista
e-mail : wesley@tdstecnologia.com.br
site : www.tdstecnologiarj.com.br
function TForm2.DecodificaMsg(Msg1: string; DecryptNo: integer): string;
var
ResultStr: string;
Temp, nMsg: char;
I, DecryptIndex, nIndex: integer;
begin
ResultStr := '';
Temp := ' ';
for i := 1 to length(Msg1) do
begin
nMsg := Msg1[i];
for DecryptIndex := 1 to DecryptNo do
begin
nMsg := Pred(nMsg);
//Msg1[I] := Temp;
nIndex := DecryptIndex;
end;
ResultStr := ResultStr + nMsg;
end;
DecodificaMsg := ResultStr;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Caption := DecodificaMsg('wesley',130)
end;
Espero te ajudado
Um abraço
Wesley Batista
e-mail : wesley@tdstecnologia.com.br
site : www.tdstecnologiarj.com.br
GOSTEI 0
Nicassio
28/04/2010
Wesley, me desculpe
ali onde se le
ela deveria me rertornar 04, no delphi 7
deveria serela deveria me rertornar 04, como no delphi 7
GOSTEI 0
Nicassio
28/04/2010
link da imagem:
http://uploaddeimagens.com.br/imagem/index/044erro.jpg
GOSTEI 0
Leandro
28/04/2010
Tente mudar a declaração dessas variaveis Temp, nMsg: char; teste com Pchar, PWideChar, PAnsiString, um desses ai ira funcionar.. sempre fique atendo ao novo esquema de unicoude do delphi 2010.
Leandro.
GOSTEI 0
Nicassio
28/04/2010
Mudei para AnsiChar as variáveis Temp, nMsg só que agora, quando vai um valor #0 nessa funçãonMsg := Pred(nMsg);da esse erro
First chance exception at $769FFBAE. Exception class EIntOverflow with message 'Integer overflow'. Process Project1.exe (5804)
GOSTEI 0
Marco Salles
28/04/2010
Isto ocorre pq o no delphi 2009 (e 2010 ) o String agora aponta para UnicodeString.
o tipo String ocupa duas vezes mais espaço que o tipo AnsiString.E isso é uma grande alteração. A partir do 2009, um Char tem 2 bytes.
Para manter a compatibilidade vc deve usar o Tipo Ansistring para String e AnsiChar para Char
Para efetura a migração vc deve fazer assim :
function DecodificaMsg(Const Msg1:Ansistring; DecryptNo: integer): Ansistring;
var
ResultStr:Ansistring;
Temp, nMsg: AnsiChar;
I, DecryptIndex, nIndex: integer;
begin
ResultStr := '';
Temp := ' ';
for i := 1 to length(Msg1) do
begin
nMsg := Msg1[i];
for DecryptIndex := 1 to DecryptNo do
begin
nMsg := Pred(nMsg);
//Msg1[I] := Temp;
nIndex := DecryptIndex;
end;
ResultStr := ResultStr + nMsg;
end;
DecodificaMsg := ResultStr;
end;
var
ResultStr:Ansistring;
Temp, nMsg: AnsiChar;
I, DecryptIndex, nIndex: integer;
begin
ResultStr := '';
Temp := ' ';
for i := 1 to length(Msg1) do
begin
nMsg := Msg1[i];
for DecryptIndex := 1 to DecryptNo do
begin
nMsg := Pred(nMsg);
//Msg1[I] := Temp;
nIndex := DecryptIndex;
end;
ResultStr := ResultStr + nMsg;
end;
DecodificaMsg := ResultStr;
end;
GOSTEI 0
Nicassio
28/04/2010
MARCO, fiz do jeito que você me passou, só que no meio do processo da o erro que mencionei acima
Mudei para AnsiChar as variáveis Temp, nMsg só que agora, quando vai um valor #0 nessa função
nMsg := Pred(nMsg);
da esse erro
First chance exception at $769FFBAE. Exception class EIntOverflow with message 'Integer overflow'. Process Project1.exe (5804)
GOSTEI 0
Marco Salles
28/04/2010
MARCO, fiz do jeito que você me passou, só que no meio do processo da o erro que mencionei acima
Vai aonde ??? Como ???
Explica como vc esta fazendo
Testei aqui com o Valor
Showmessage('jn',570) e Retornou 4 < como Vc queria >
Portanto não estou entedendo o que vc esta fazendo
Mudei para AnsiChar as variáveis Temp, nMsg só que agora, quando vai um valor #0 nessa função nMsg := Pred(nMsg); da esse erro First chance exception at $769FFBAE. Exception class EIntOverflow with message 'Integer overflow'. Process Project1.exe (5804)
GOSTEI 0
Nicassio
28/04/2010
Marco, fiz o teste aqui novamente, agora em um projeto novo, realmente está funcionando, vou fazer agora o teste no projeto final, assim que tiver uma resposta te aviso,
vlw pela ajuda
vlw pela ajuda
GOSTEI 0
Leandro
28/04/2010
Testei na minha maquina tambem e esta funcionando perfeitamente.
Leandro.
GOSTEI 0
Wilson Junior
28/04/2010
Testado e aprovado. Meus parabéns pelas explicações Marco.
GOSTEI 0
Nicassio
28/04/2010
Vlw, marco, fiz o teste aqui e funcionou.
GOSTEI 0
Marco Salles
28/04/2010
é parabéns a todos nos... a união faz a força não é mesmo???
GOSTEI 0