如何从Delphi6迁移到Delphi2010(Unicode问题)

3

你好,我之前在Delphi 6中使用Francois Piette的RasDial,但在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
Jiraya,欢迎来到SO!我给你的问题打了“delphi”的标签。虽然你有特定版本的标签,但这是一个更普遍的问题(例如,从D7升级到DXE的人可能会遇到同样的问题)。此外,我有一个关注“delphi”的标签,类似于“delphi-6”这样的子标签不会显示出来 - 我是偶然发现的。 - David
如果这是Francois PIETTE的代码,你可能想要发布到http://lists.elists.org/cgi-bin/mailman/listinfo/delphi,因为他仍然在那里活跃 - 而我在这里没有看到他。 - Cosmin Prund
2个回答

3
你可以从将所有的string声明(除了已经是string[255]的)更改为AnsiString,所有的Char更改为AnsiChar,以及所有的PChar更改为PAnsiChar开始。

然后,在这里阅读三篇文章中的第一篇,介绍如何将Delphi的早期版本移植到Unicode。这些文章由Nick Hodges撰写,他曾是CodeGear产品的Delphi产品经理。他们涵盖了您需要进行其他现有代码更改的所有详细信息。


1

String[255] 是短字符串(一个字节),但是当你添加 pchar 时,它会以两个字节为单位增长。

尝试用 pansichar 替换 pchar。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接