Delphi 64与32位的差异
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);
Delphi 64与32位的差异的更多相关文章
- VS2013下的64位与32位程序配置
VS2013下的64位与32位程序配置 在Windows 7 64bit和Visual Studio 2013下生成64位程序. 新建一个Visual Studio Win32 Console项目 ...
- windows7 64,32位下scrapy爬虫框架的环境搭建
适用于python 2.7 64位安装 一.操作系统:WIN7 64位 二.python版本:2.7 64位(scrapy目前不支持3.x) 不确定位数的,看图 三.安装相关软件:(可以从我的百度网盘 ...
- 关于oracle 11g 64位与 32位的 plsql、及其他32位应用程序共存的问题
因为 plsql 不支持 64位 oracle 客户端,所以plsql 必须使用 oracle 的 32位 instanclient 包. 解压缩后放一个目录,例如: D:\Oracle\insta ...
- 64位与32位编程的数据类型区别(C/C++)
C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长.在不同的平台上,根据编译器不同的实现,它们的字长如下表所示: 数据类型 LP64 ILP64 LLP64 ILP32 LP ...
- Ubuntu 64编译32位程序
首先要打开64位系统对32位的支持 第一步:确认64为架构的内核 dpkg --print-architecture 输出:adm64 说明已拥有64位架构内核. 第二步:确认打开了多架构支持功能 d ...
- c++ 判断是64还是32位系统
1.IsWow64Process 确定指定进程是否运行在64位操作系统的32环境(Wow64)下. 语法 BOOL WINAPI IsWow64Process( __in HANDLE hProces ...
- 安装office2016 64位时提示64位与32位的office程序不兼容,在系统是64位的情况下,由于应用的需要,必须装64位的office,怎么办
解决办法如下: 如果是,那就看看32位的能不能安装了,要是能,就重新安装一次,把所有组件全部安装,然后,在进行卸载,一般可以卸载成功 如果卸载不成功,这个时候再使用微软的专用卸载工具,——要认清,一定 ...
- eclipse 64和32位切换
JAVA_HOME配置的是JAVA_HOME=D:\Java\32\jdk1.6.0_13
- centos7 64运行32位程序
yum在线安装: sudo yum install xulrunner.i686 或者: sudo yum install ia32-libs.i686 PS:可以查看一下当前源库里有没有ia32-l ...
随机推荐
- 转: Linux 上的常用文件传输方式介绍与比较
from: https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/ ftp ftp 命令使用文件传输协议(File Transf ...
- Linux内核性能测试工具全景图
1.Linux性能监控工具及对应的内核层 2.Linux性能基础测试工具及对应内核层 3.Linux性能监控工具Sar及对应内核层 4.Linux性能调优工具及对应的内核层
- 6. datasource - mysql【从零开始学Spring Boot】
在任何一个平台都逃离不了数据库的操作,那么在spring boot中怎么接入数据库呢? 很简单,我们需要在application.properties进行配置一下,application.proper ...
- MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...
- 自动化统一安装部署tomcat
背景:多台服务器来回切换,安装部署tomcat,浪费时间 目的: 一次修改,统一安装,统一部署. 进程:ps -ef|grep tomcat|grep -v 'grep'|awk '{print $2 ...
- EFFECTIVE JAVA 类和接口
第十六条:复合优先于继承 //这是一个不好的类---执行的结果 addCount = 4(addAll的实现依赖于HashSet的add方法,InstrumentHashSet方法重写了add方法有执 ...
- 通过特定获取获取电脑外网IP地址
void get_WanIp() { }; ]; ]; ; }; GetTempPathA(MAX_PATH,szFilePath); strcat(szFilePath,"IPinTheW ...
- java统计中英文字数 Java问题通用解决代码
http://yangchao20020.blog.163.com/blog/static/483822472011111635424751/ 这个不适用于新浪微博字数的统计,结果有差别,若需要可 ...
- C# 写日志到文件
C# 写日志到文件 using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms ...
- Docker iptables failed: iptables -t nat -A DOCKER -p tcp
Dokcer网络问题 因为操作或修该过iptables导致docker容器出现如下错误: [root@mysqlserver ~]# docker restart cvnavi-centos-tomc ...