delphi 开发64位系统 需要MD5计算 怎么把原来32位的MD5转64位

解决方案 »

  1.   

    注意类型,特别是PChar PWideChar PAnsiChar之间的区别。Delphi2009后,为unicode版,PChar已经为PWideChar,之前版本PChar为PAnsiChar,你可以尝试将MD5模块中的PChar全替换为PAnsiChar试试。
      

  2.   

    用BCB写过,Delphi倒是没有弄过
      

  3.   

    64位的 MD5 是有问题的,  做一个32位的DLL 运算,然后返回运算结果试试?反正直接用 64位算MD5是不行的。
      

  4.   

    indy的md5函数在64位下不对了?
      

  5.   

    此方法 试了 恩 64位程序 是无法调用32位编译出来的dll的 您试下
      

  6.   

    恩恩 是的 呵呵 求救中 我用的就是indy的 哎 郁闷死了
      

  7.   

    Indy的md5貌似使用了汇编代码,而delphi里64位汇编跟32位汇编使用的寄存器是不同的。因此你要把汇编的部分重写(带64位编译开关),或者用纯pascal代码替换。我就是这么改写64位下MD5的。
      

  8.   

    刚看了下XE2 Update3里Indy MD5汇编部分的源代码(IdGlobalProtocols.pas),已经针对64位进行处理了:{$IFDEF NO_NATIVE_X86}
    function ROL(const AVal: LongWord; AShift: Byte): LongWord;
      {$IFDEF USE_INLINE} inline; {$ENDIF}
    begin
       Result := (AVal shl AShift) or (AVal shr (32 - AShift));
    end;function ROR(const AVal: LongWord; AShift: Byte): LongWord;
      {$IFDEF USE_INLINE} inline; {$ENDIF}
    begin
       Result := (AVal shr AShift) or (AVal shl (32 - AShift)) ;
    end;{$ELSE}// Arg1=EAX, Arg2=DL
    function ROL(const AVal: LongWord; AShift: Byte): LongWord; assembler;
    asm
      mov  cl, dl
      rol  eax, cl
    end;function ROR(const AVal: LongWord; AShift: Byte): LongWord; assembler;
    asm
      mov  cl, dl
      ror  eax, cl
    end;
    {$ENDIF}
      

  9.   

    http://blog.csdn.net/bamboocaep/article/details/7212020
      

  10.   

    草 CSDN  全体员工的 所有