升级d7的代码到Xe以上版本注意事项

Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 !最后有个项目要移植到64位,所以这个很有用。在2010中PChar已经不再表示PAnsiChar而是表示PWideChar,如果依然这样写,运行时很可能会得到一个内存访问错误。因为每 次Inc(P),实际上指针向前移动了2字节,因为SizeOf(WideChar)=2,Inc(P)相当于 P:=P+SizeOf(WideChar)。 解决方法是把PChar替换成PAnsiChar 立即下载

delphi2010是delphi所有版本的分水岭,其中2010—xe10.2之间版本上的代码都有比较好的兼容性,基本上都能直接进行编译,不需要过多修改,但d7距d2010跨度4个版本以上,新版本除了增加新功能函数外,对原有的vcl控件也进行了优化和增强,并且支持64位、跨平台开发、多语言、直接支持跟随系统风格样式,所以升级相对有些麻烦,但却有价值。

RZ、FR、EHLIB 等常用控件都有跟随delphi推出了版本,d7的绝大部分代码也可以直接在d2010以上版本中进行编译,最需要处理的问题主要在新版本字符串类型方面的变化。

1,PChar

因为Delphi不支持无类型指针的算术运算,很多程序员使用 PChar来代替Pointer,即使指针指向目标并不是PAnsiChar。

考虑如下代码:

var 

   P:PChar;

   Buffer:Pointer;

begin

   GetMem(Buffer,255);

   P:=Buffer;

   p^:=#1;

   Inc(P);

   p^:=#2;

   FreeMem(Buffer,255);

end;

在2010中PChar已经不再表示PAnsiChar而是表示PWideChar,如果依然这样写,运行时很可能会得到一个内存访问错误。因为每 次Inc(P),实际上指针向前移动了2字节,因为SizeOf(WideChar)=2,Inc(P)相当于 P:=P+SizeOf(WideChar)。

解决方法是把PChar替换成PAnsiChar 

2,Move FillChar CopyMemory

这些函数依赖的是字节长度,往往我们直接使用Length(Str)来获取,这是行不通的。

考虑如下代码:

var

   P1,P2:String;

begin

   P1:='test';

   SetLength(P2,Length(P1));

   Move(P1[1],P2[1],Length(P1));

在2010中String默认映射到UnicodeString,单个字符是2字节,所以上文中P1实际占用了8字节内存,而传给Move函数的长 度只有4字节,最终结果是P2="te"。

解决办法1:

修改String为AnsiString,该方案虽然可行,但你的程序就享受不到Unicode待遇了。

解决办法2:

SetLength 函数不要修改,因为他的长度参数是字符长度,而不是字节长度。

Move函数的最后一个参数 Length(P1) 修改成 Length(P1)*SizeOf(Char)。

注意:不要偷懒使用万一老师说的ByteLength函数,该函数并没有For AnsiString的重载,编译器会 把参数隐式转化为UnicodeString然后,ByteLength函数计算UnicodeString的长度。例如:一旦你不小心传入了一个 AnsiString类型长度为4的字符串,函数会返回8,而不是你期望的长度4。 

3,Key in ['a'..'z','B','C']

这类代码最好替换成CharInSet(Key,['a'..'z','B','C']) 不然会当作AnsiChar处理。

4,WideString

代码中的所有WideString都考虑替换成String,现在 WideString只是为了与COM兼容而存在,且没有引用计数,性能低下。

deiphi7做的通讯录 初学delphi做的试用品。其中运用了TTreeView、TADOConnection、TADQuery、TADOGrid、TMainMenu、TImageList等等控件。适合初学者借鉴只用,大家会想学习才能进步。 立即下载

相关推荐

Ansys Lumerical + HFSS + optiSLang 三剑客:手把手教你优化行波MZM调制器(附完整参数配置)

本文详细介绍了如何利用Ansys Lumerical、HFSS和optiSLang三款工具构建自动化协同设计流程,以优化行波马赫曾德尔调制器(TW-MZM)的性能。通过参数化仿真、流程集成与元模型技术,该方案能高效解决多物理场耦合挑战,实现调制带宽、驱动电压等多目标的全局优化,显著提升光子集成芯片的设计效率与性能潜力。

weixin_29251131的博客 586

别再手动点来点去了!用一条命令在Windows上搞定X-ray安全扫描工具的安装与证书配置

本文详细介绍了如何在Windows平台上通过命令行一键完成X-ray安全扫描工具的安装与证书配置,大幅提升部署效率。通过PowerShell脚本和批处理方案,实现从下载最新版本到自动生成安装CA证书的全流程自动化,特别适合网络安全从业者和运维人员使用。

weixin_30755393的博客 455

非易失存储器读写

24C256、IIC_SCL、IIC_SDA

CT_1104的专栏 2986

delphi7升迁delphi xe6注意事项

d7 --->dxe6需要修改 1.PChar替换成PAnsiChar 2.Length(P1) 修改成 Length(P1)*SizeOf(Char) 或者 ByteLength函数计算 3.Key in ['a'..'z','B','C'] 这类代码最好替换成CharInSet(Key,['a'..'z','B','C']) 不然会当作AnsiChar处理。 4.代码中的所有Wid...

weixin_30952103的博客 432

Keil5安装多版本共存方案:实用技巧分享

分享Keil5安装过程中实现多版本共存的实用方法,解决开发环境冲突问题。通过合理配置路径与版本管理,让keil5安装更高效稳定,提升嵌入式开发体验。

weixin_42514750的博客 1529

李大勇matlab密码,基于MatlabSimulink的太阳能热水系统仿真研究 沈超.doc

基于MatlabSimulink的太阳能热水系统仿真研究 沈超中国工程热物理学会 工程热力学与能源利用 编号:141090基于Matlab/Simulink的太阳能热水系统仿真研究沈 超1 1 余 鹏1 李洪欣1 魏新利2郑州大学土木工程学院,郑州 450001郑州大学化工与能源学院,郑州 45...

weixin_42298437的博客 1342

从Delphi 7升级到Delphi XE

Delphi 7和XE中间有好几个版本,可都不太流行,一是因为Delphi有些边缘化,二是7在XP环境下是近乎完美的版本。市场上关于delphi的书越来越少,提供从7升级到XE介绍的资料几乎没用。这里我试着列举一下7和XE的差异和注意事项,给需要升级的朋友一些线索。 1. 7和XE是可以共存的,7的工程文件是.dpr,XE的是.dproj,用XE打开dpr文件会提示升级,自动创建新的项目文件。X...

suoyihen 883

电能质量仿真:电能质量改善措施仿真_(12).电能质量改善措施综合仿真案例

假设我们有一个微电网系统,该系统包含分布式电源(如光伏板、风力发电机)、储能设备、负荷和电网连接。电压波动:由于负荷的波动和分布式电源的间歇性输出,系统电压出现了不稳定的情况。谐波污染:非线性负荷和逆变器的运行导致系统中出现了显著的谐波污染。频率偏差:分布式电源的波动和负荷的突变导致系统频率出现了偏差。我们需要通过仿真来评估这些问题的影响,并提出相应的改善措施。

2401_87715305的博客 1360

Delphi 7移植到Delphi XE5碰到及解决的问题 (1)

最近在把一些应用中的项目从D7 升级到 XE5,碰到了不少问题,先是把部分第三方控件改为标准控件,这步比较简单,控件修改完成后在XE5中打开项目,编译,结果是一堆Warning,其中还有几个Error,现把问题记录下来,方便查看。 原代码: ExitDocimasy(BaseParam.CommProtocol, PAnsiChar((arAddr[iIndex] as TEdit).Text), Lengt...

dds2014的博客 511

PyTorch实战(2)——使用PyTorch构建神经网络

在本节中,我们使用 PyTorch 在简单数据集上构建了一个神经网络,训练神经网络来映射输入和输出,并通过执行反向传播来更新权重值以最小化损失值,并利用 Sequential 类简化网络构建过程;介绍了获取网络中间值的常用方法,以及如何使用 save、load 方法保存和加载模型,以避免再次训练模型。

盼小辉丶的博客 1万+

软考备考:《系统规划与管理师教程》(第2版)第2章——数字ZG与数智化发展

🔴数字化转型的定义:数字化转型是建立在数字化转换、数字化升级基础上,进一步触及组织核心业务,以新建一种业务模式为目标的高层次转型。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 960

Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 .

Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 这两天把一个使用Delphi2007成功升级到了Delphi2010。升级途中很艰辛,总结了 以下经验与大家分享。另外,D7使用的第三方组件,由于官方没有发布For Delphi2010的更新,修改的第三 方组件列表见文章尾部。 1,PChar 因为Delphi不支持无类型指针的算术运算,很多程序员

書山有路勤為徑,學海無涯苦作舟 1万+

PCL 基于超体素的点云分割【2024最新版】

点云超体素分割原理介绍、代码实现以及如何做到将每一个超体素内的点进行单独保存而不造成点云缺失的方法。博客长期更新,本文最近一次更新时间为:2024年12月29日。

点云侠的博客 36万+

Cat4500升级注意事项

第一部分:升级ROMMON 可以通过release note去查看什么Supervisor建议什么样的版本。例如:ROMMON Release Notes for the WS-X45-SUP7-E, WS-X45-SUP7L-E, and WS-C4500X Family of Switches Current Release: 15.0(1r)SG16—March 14, 2019 Prio...

weixin_30439067的博客 819

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

spcomm for XE10.2 资源文件介绍

spcomm for XE10.2 资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 简介 spcomm for XE10.2 是一款基于 D7 时代的经典串口通讯控件。经过优化升级,此版本控件现已支持XE10.2平台,为广大开发者提供了极大便利。该控件不仅兼容大于9个串口,更让XE时代也能体验到经典的串口通讯功能。 功能特点 兼容XE10.2平台 支持大于9个串口...

gitblog_06769的博客 317

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

delphi7升迁delphi xe注意事项

d7 --->dxe6需要修改 1.PChar替换成PAnsiChar 2.Length(P1) 修改成 Length(P1)*SizeOf(Char) 或者 ByteLength函数计算 3.Key in ['a'..'z','B','C'] 这类代码最好替换成CharInSet(Key,['a'..'z','B','C']) 不然会当作AnsiChar处理。 4.代码中的所有Wid...

wqc159的专栏 1176

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 用delphi开发微信公众号推送消息和自动回复消息
下一篇: unigui是什么?能用来干什么?一篇文章让你全面了解
大风吹过脸颊
博客等级 码龄16年 167粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值