如何从Delphi迁移到Delphi 2010(Unicode问题)

时间:2011-04-06 21:41:57

标签: delphi unicode delphi-2010 delphi-6

您好我使用Francois Piette的RasDial和Delphi 6,但它在Delphi 2010中停止工作 我怎样才能像以前一样继续使用这些功能?

class function Encryption.DecriptPasswd(strPasswd: string): string;  
type  
  PWORD = ^WORD;  
var  
   Buffer : String;  
   PW : String[255];
   P : PWORD;
   I : Integer;  
   V : Integer;
begin                                                                
  PW := ' ';                                                         
  P := PWORD(@PW[0]);                                                
  I := 1;                                                            
  while I <= Length(strPasswd) do                                    
  begin                                                              
    Buffer := Copy(strPasswd, I, 5);                                 
    I := I + 5;                                                      
    V := StrToInt(Buffer) - 34567;                                   
    P^ := V;                                                         
    Inc(P);                                                          
  end;                                                               
  Result := PW;                                                      
end;                                                                 

class function Encryption.EncriptPasswd(strPasswd: string): string;  
type                                                                 
  PWORD = ^WORD;                                                     
var                                                                   
  Len : Integer;                                                       
  I : Integer;                                                         
  V : DWORD;  
  P : PChar;  
  Buffer : String[255];  
begin  
  Buffer := strPasswd;  
  Len := Length(Buffer) + 1;  
  if (Len mod 2) <> 0 then  
    Inc(Len);  

  if Len < 10 then  
    Len := 10;  

  I := Length(Buffer);  
  if I = 0 then  
    Buffer := IntToStr(GetTickCount)  
  else  
    while Length(Buffer) < 10 do  
      Buffer := Buffer + Buffer;  
  SetLength(Buffer, I);  

  Result := '';  
  P := PChar(@Buffer[0]);  
  for I := 1 to Len div 2 do  
  begin  
    V := 34567 + PWORD(P)^;  
    P := P + 2;  
    Result := Result + Format('%5.5d', [V]);  
  end;  
end; 

2 个答案:

答案 0 :(得分:3)

您可以将所有string声明(已经存在的string[255]声明除外)更改为AnsiString,将所有Char更改为AnsiChar,以及所有PCharPAnsiChar

然后转到here,这是关于将Unicode前版本的Delphi移植到Unicode的三篇文章中的第一篇。当它是CodeGear产品时,它们是Delphi的前产品经理Nick Hodges写得非常好。它们涵盖了对其他现有代码进行更改所需的所有详细信息。

答案 1 :(得分:1)

String [255]是短字符串(一个字节) 但是当你添加pchar时,它会增加两个字节的两个字节

尝试用pansichar替换pchar