加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 不推荐使用的命令StrPas

发布时间:2020-12-15 09:40:57 所属栏目:大数据 来源:网络整理
导读:当我尝试编译我的代码时,我得到以下错误.有谁能建议我在这里做错了什么? W1000 Symbol 'StrPas' is deprecated: 'Moved to the AnsiStrings unit' 我正在尝试编译的代码片段是: {$IFDEF NEWVER} // Codegear delphi 2009 d12.0 StrCopy(pSerialNumber,@Buf
当我尝试编译我的代码时,我得到以下错误.有谁能建议我在这里做错了什么?

W1000 Symbol 'StrPas' is deprecated: 'Moved to the AnsiStrings unit'

我正在尝试编译的代码片段是:

{$IFDEF NEWVER} // Codegear delphi 2009    d12.0
      StrCopy(pSerialNumber,@Buf[pDevDesc.SerialNumberOffset + 1]);
{$ELSE}
      StrPCopy(pSerialNumber,FlipAndCodeBytes(StrPas(@Buf[pDevDesc.SerialNumberOffset + 1])));
{$ENDIF}

解决方法

试图破译以前程序员的意图会导致另一种可能性……

由于字符串类型的变化,似乎有一个修复应用于Delphi 2009.我相信你不想重新发明另一个程序员已经完成的所有修复.

查看代码,Delphi 2009旨在编译以下行(不使用StrPas):

StrCopy(pSerialNumber,@Buf[pDevDesc.SerialNumberOffset + 1]);

旧版本的Delphi旨在编译以下行(使用StrPas):

StrPCopy(pSerialNumber,FlipAndCodeBytes(StrPas(@Buf[pDevDesc.SerialNumberOffset + 1])));

在这种情况下,Delphi XE-6不会被归类为“旧版本”,因此错误在于您正在编译条件代码的错误分支.

如果定义了NEWVER,条件代码将编译第一个语句.因此,如果您确保定义了NEWVER,那么您应该编译正确的行.您可能需要修改相应的包含文件,或将conditonal设置为项目文件中的选项. (这取决于您的环境设置方式.)

但是,条件符号NEWVER的名称有些不合适.显然,2009年不再是“新版本” – 实际上甚至XE6现在都是“旧版本”.

所以你可能想要重写你的条件如下:

{$IF CompilerVersion >= 20.0} //>= Delphi 2009
    StrCopy(pSerialNumber,@Buf[pDevDesc.SerialNumberOffset + 1]);
{$ELSE}
    StrPCopy(pSerialNumber,FlipAndCodeBytes(StrPas(@Buf[pDevDesc.SerialNumberOffset + 1])));
{$IFEND}

有关条件定义的更多信息,请参阅以下链接:

http://docwiki.embarcadero.com/RADStudio/XE7/en/Conditional_compilation_(Delphi)
http://docwiki.embarcadero.com/RADStudio/XE7/en/Compiler_Versions

如果你需要支持很多旧版本的Delphi(如果我没弄错的话,比Delphi 6旧版本),你可能需要编写以下代码:

{$IFDEF CONDITIONALEXPRESSIONS}
    {$IF CompilerVersion >= 20.0} //>= Delphi 2009
        StrCopy(pSerialNumber,@Buf[pDevDesc.SerialNumberOffset + 1]);
    {$ELSE} //< Delphi 2009
        StrPCopy(pSerialNumber,FlipAndCodeBytes(StrPas(@Buf[pDevDesc.SerialNumberOffset + 1])));
    {$IFEND}
{$ELSE} //< Delphi 6
    StrPCopy(pSerialNumber,FlipAndCodeBytes(StrPas(@Buf[pDevDesc.SerialNumberOffset + 1])));
{$ENDIF}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读