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
总体来说:
- 同样的Windows API,如:CreateWindowEx,PeekMessage,etc
- 同样的Delphi RTL:SysUtils,Classes,Generics.Collections,etc
- VCL也相同:Forms,Graphics,Controls,Menus,etc
- 错误处理上也相同: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
- 点赞
- 收藏
- 分享
- 文章举报
- Using WinInet functions to download a file asynchronously in Delphi
- Delphi中API编程-编译实现
- Delphi Win32核心API参考-窗口创建
- How to Set Currency Field DisplayFormat without Currency Symbol in Delphi
- Delphi Tmessage标准消息详解
- delphi 获取MAC地址
- delphi 获取文件的相关时间
- Delphi 中串口通讯的实现
- Delphi中MsComm控件的安装使用
- Delphi读取本机存在的串口
- delphi6+winxp的DLL断点调试
- DELPHI 控制EXCEL
- Delphi 2007 安装程序不能放在中文目录下安装.
- DELPHI国外经典站
- delphi中PE文件结构
- delphi中使用ADOQuery时的中文参数问题
- 通过delphi将秒数转换成日期格式
- 通过delphi将秒数转换成日期格式
- VC调用Delphi制作的动态链接库如何互相传递字符串
- Delphi 中用 GetEnvironmentVariable 获取常用系统变量