开发者

How to migrate from Delphi6 to Delphi2010 (Unicode Problem)

Hi I was using the Francois Piette's RasDial with Delphi 6, but it stopped working in Delphi 2010 How can I keep using these functions like before?

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开发者_如何学Go[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; 


You can start by changing all string declarations (except the string[255] ones, which already are) to AnsiString, all Char to AnsiChar, and all PChar to PAnsiChar.

Then go here for the first in a series of three articles on porting pre-Unicode versions of Delphi to Unicode. They're really well written by Nick Hodges, former Product Manager for Delphi when it was a CodeGear product. They cover all the details you need to make the changes to your other existing code.


String[255] is short string (one byte) but when you add pchar, it grows two bytes by two bytes

try replace pchar by pansichar

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜