Как перейти с Delphi6 на Delphi2010 (проблема с Unicode) - PullRequest
3 голосов
/ 07 апреля 2011

Привет! Я использовал 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 ]

3 голосов
/ 07 апреля 2011

Вы можете начать с изменения всех объявлений string (кроме уже существующих string[255]) на AnsiString, всех Char на AnsiChar и всех PChar на PAnsiChar.

Затем перейдите сюда для первой в серии из трех статей по переносу версий Delphi до Unicode на Unicode. Они действительно хорошо написаны Ником Ходжесом , бывшим менеджером по продукту Delphi, когда он был продуктом CodeGear. Они охватывают все детали, необходимые для внесения изменений в ваш другой существующий код.

1 голос
/ 07 апреля 2011

String [255] - короткая строка (один байт), но когда вы добавляете pchar, он увеличивается на два байта на два байта

попробуйте заменить pchar на pansichar

...