Problema com função no delphi 2010

Delphi

28/04/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:

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

Nicassio

Curtidas 0

Respostas

Wesley Batista

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 ?

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;
  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

GOSTEI 0
Nicassio

Nicassio

28/04/2010

Wesley, me desculpe ali onde se le
ela deveria me rertornar 04, no delphi 7
deveria ser
ela deveria me rertornar 04, como no delphi 7


GOSTEI 0
Nicassio

Nicassio

28/04/2010

link da imagem: http://uploaddeimagens.com.br/imagem/index/044erro.jpg
GOSTEI 0
Leandro

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

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

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;      
GOSTEI 0
Nicassio

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

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
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)
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 
GOSTEI 0
Nicassio

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
GOSTEI 0
Leandro

Leandro

28/04/2010

Testei na minha maquina tambem e esta funcionando perfeitamente. Leandro.
GOSTEI 0
Wilson Junior

Wilson Junior

28/04/2010

Testado e aprovado. Meus parabéns pelas explicações Marco.
GOSTEI 0
Nicassio

Nicassio

28/04/2010

Vlw, marco, fiz o teste aqui e funcionou.
GOSTEI 0
Marco Salles

Marco Salles

28/04/2010

é parabéns a todos nos... a união faz a força não é mesmo???
GOSTEI 0
POSTAR