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

Delphi 64与32位的差异的更多相关文章

  1. VS2013下的64位与32位程序配置

    VS2013下的64位与32位程序配置   在Windows 7 64bit和Visual Studio 2013下生成64位程序. 新建一个Visual Studio Win32 Console项目 ...

  2. windows7 64,32位下scrapy爬虫框架的环境搭建

    适用于python 2.7 64位安装 一.操作系统:WIN7 64位 二.python版本:2.7 64位(scrapy目前不支持3.x) 不确定位数的,看图 三.安装相关软件:(可以从我的百度网盘 ...

  3. 关于oracle 11g 64位与 32位的 plsql、及其他32位应用程序共存的问题

    因为 plsql 不支持 64位 oracle 客户端,所以plsql 必须使用 oracle 的 32位 instanclient 包.  解压缩后放一个目录,例如: D:\Oracle\insta ...

  4. 64位与32位编程的数据类型区别(C/C++)

    C/C++仅仅定义了这些基本数据类型之间的关系,并没有定义严格定义它们的字长.在不同的平台上,根据编译器不同的实现,它们的字长如下表所示: 数据类型 LP64 ILP64 LLP64 ILP32 LP ...

  5. Ubuntu 64编译32位程序

    首先要打开64位系统对32位的支持 第一步:确认64为架构的内核 dpkg --print-architecture 输出:adm64 说明已拥有64位架构内核. 第二步:确认打开了多架构支持功能 d ...

  6. c++ 判断是64还是32位系统

    1.IsWow64Process 确定指定进程是否运行在64位操作系统的32环境(Wow64)下. 语法 BOOL WINAPI IsWow64Process( __in HANDLE hProces ...

  7. 安装office2016 64位时提示64位与32位的office程序不兼容,在系统是64位的情况下,由于应用的需要,必须装64位的office,怎么办

    解决办法如下: 如果是,那就看看32位的能不能安装了,要是能,就重新安装一次,把所有组件全部安装,然后,在进行卸载,一般可以卸载成功 如果卸载不成功,这个时候再使用微软的专用卸载工具,——要认清,一定 ...

  8. eclipse 64和32位切换

    JAVA_HOME配置的是JAVA_HOME=D:\Java\32\jdk1.6.0_13

  9. centos7 64运行32位程序

    yum在线安装: sudo yum install xulrunner.i686 或者: sudo yum install ia32-libs.i686 PS:可以查看一下当前源库里有没有ia32-l ...

随机推荐

  1. caffe卷积层代码阅读笔记

    卷积的实现思想: 通过im2col将image转为一个matrix,将卷积操作转为矩阵乘法运算 通过调用GEMM完毕运算操作 以下两个图是我在知乎中发现的,"盗"用一下,确实非常好 ...

  2. iOS---sha1加密的一个坑

    OC语言写的sha1加密算法,在网上随手能够搜索到(例如以下便是),可是我不得不说有一些人不责任,没有提醒大家导入必要的系统头文件.从而导致错误 + (NSString *) sha1:(NSStri ...

  3. Node.js 内存泄露 定位

    之前我们在64位Linux服务器上使用Node.js时,当Node进程物理内存接近1.6G,由于谷歌V8引擎对内存的限制,会导致进程退出! 显然我们自身编码或npm加载的第3行模块存在内存泄露问题,那 ...

  4. Linux中MySQL数据库max_allowed_packet的调整

    在MySQL数据库里某表有一个blob字段,当上传文件超过1M的时候出现下面的错误: PreparedStatementCallback; SQL [insert into uos.docfile(r ...

  5. 有效的web安全信息源

    杂志:hackcto ,书安 乌云知识库,91ri.org,安全脉搏(http://www.secpulse.com/) 乌云公开漏洞,乌云热点漏洞,90sec 内网渗透找90.web注入找习科, 已 ...

  6. Activity启动活动最佳写法

    一,在被启动的Activity中新加一个静态方法public static void actionStart(Context context, String data1, String data2) ...

  7. boost库常用功能

    1.shared_ptr shared_ptr除了最基本的可以用new初始化以外,还可以使用其他方式初始化.在使用一些c的api时候,这种初始化方式非常有用,如下 boost::shared_ptr& ...

  8. Socket协议通讯

    Socket协议通讯   服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; us ...

  9. C#CRC16 Modbus 效验算法

    CRC校验(循环冗余校验)小知识 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗 ...

  10. iOS中文输入法多次触发的问题及解决方案

    最近要在移动端实现一个文本框实时搜索的功能,即在文本框里每输入一个字,就向服务器请求一次搜索结果.暂且不考虑性能优化问题,第一时间想到的是用keyup实现: $('input').on('keyup' ...