• Delphi 64与32位的差异


          最近,Delphi推出了64位预览版本, 我做为一个忠实的Delphier, 看到这消息后,第一时间学习,并写下这个做为以后的参考资料。

       相同点:

          在Delphi 64位版本中,UnicodeString,AnsiString,WideString在使用上与32没有区别,只是索引变成了64位,如:S[I]中的I变成了64位。    

    Singed types

    Delphi/32

    Delphi/64

    ShortInt

    1 bytes

    SmallInt

    2 bytes

    LongInt

    4 bytes

    Integer

    4 bytes

    Int64

    8 bytes


    Unsinged types

    Delphi/32

    Delphi/64

    Byte

    1 bytes

    Word

    2 bytes

    LongWord

    4 bytes

    Cardianl

    4 bytes

    UInt64

    8 bytes

    ← 符号表示大小与Delphi/32相同

    不同的地方:

    NativeInt,NativeUint - 64 bits

    Point(all pointers) - 64 bits

    Dynamic Arrays - 64-bit indexing

    Floating point math – Double

    Point

    String

    Class instance

    class reference

    Interface

    AnsiString

    WideString

    UnicodeString

    Procedure pointer

    Dynamic array

    PAnsiChar

    PWideChar

    PChar

    上面的类型在32位都是4 bytes,在64位下是8 bytes

    总体来说:

    1. 同样的Windows API,如:CreateWindowEx,PeekMessage,etc
    2. 同样的Delphi RTL:SysUtils,Classes,Generics.Collections,etc
    3. VCL也相同:Forms,Graphics,Controls,Menus,etc
    4. 错误处理上也相同:try…finally…., try….exception…..

    在64位下,这些调用约定将被看做一致:register,passcal, cdecl,stdcall

    Delphi/64不支持pascal与BASM(ASM)混写了,只支持纯Asm procedure。

    调用过程或函数的前面四传参寄存器也发变成了:RCX, RDX, R8, R9(或XMM0-XMM3)

    在处理Message消息结构体时,需要进行显示强制转换,例如:

    SendMessage(hWnd,WM_SETTEXT,0,LPARAM(@MyCharArray));
    Message.Result:=LRESULT(Self);

  • 相关阅读:
    ZJOI2019二轮游记
    Luogu P5284 [十二省联考2019]字符串问题
    Luogu P5309 [Ynoi2012]D1T1
    Luogu P5292 [HNOI2019]校园旅行
    LOJ #6052. 「雅礼集训 2017 Day11」DIV
    Luogu P5279 [ZJOI2019]麻将
    LOJ #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
    Luogu P5283 [十二省联考2019]异或粽子
    Luogu P5290 [十二省联考2019]春节十二响
    Luogu P5285 [十二省联考2019]骗分过样例
  • 原文地址:https://www.cnblogs.com/neugls/p/2005736.html
Copyright © 2020-2023  润新知