【问题标题】:How to migrate from Delphi6 to Delphi2010 (Unicode Problem)如何从 Delphi 6 迁移到 Delphi 2010(Unicode 问题)
【发布时间】:2011-04-06 21:41:56
【问题描述】:

您好,我在 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; 

【问题讨论】:

  • Jiraya,欢迎来到 SO!我将您的问题标记为“delphi”。您有特定版本的标签,但这是一个更普遍的问题(例如,从 D7 升级到 DXE 的人可能会遇到同样的问题。)我也有一个“delphi”的监视标签和类似的子标签,如“delphi-6”don不要出现 - 我偶然发现了这个。
  • 如果是 Francois PIETTE 的代码,您可能需要发帖到 lists.elists.org/cgi-bin/mailman/listinfo/delphi,因为他在那里仍然很活跃 - 我还没有在这里看到他。

标签: delphi unicode delphi-2010 delphi-6


【解决方案1】:

您可以首先将所有string 声明(除了已经存在的string[255] 声明)更改为AnsiString,将所有Char 更改为AnsiChar,并将所有PChar 更改为PAnsiChar

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

【讨论】:

    【解决方案2】:

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

    尝试用 pansichar 替换 pchar

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多