您的位置:首页 > 编程语言 > Delphi

Delphi 64与32位的差异

2020-02-18 00:22 621 查看

      最近,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);

转载于:https://www.cnblogs.com/neugls/archive/2011/04/05/2005736.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
dieba6990 发布了0 篇原创文章 · 获赞 0 · 访问量 88 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: