Delphi 64与32位的差异

http://www.cnblogs.com/neugls/archive/2011/04/05/2005736.html

相同点:

在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);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值