函数初始化代码从西雅图更改为东京吗?

2024-01-17

我正在将代码从 Delphi 10 Seattle 升级到 Delphi 10.2 Tokyo 并得到很多 H2077 提示Value assigned to ... never used关于作业。
(即使在过去明确添加这些内容以消除“可能没有价值”警告的地方)。

这些都是初始化的函数,如下所示:

Result := 0;
...

Or:

Result := ftType1; // where ftType1 is an enumerated type
...

编译器在检测这些方面是否变得更聪明,或者函数的初始返回值是否发生了变化?

我们总是“打开”这些提示,并且我总是构建(而不是编译)。

在西雅图无需提示即可构建的示例函数 (1),
但给出了提示H2077 Value assigned to 'GetDatabaseDialect' not used在第一个Result := 0东京线。

function GetDatabaseDialect(DBName, User, Pswd: string) : integer;
var
  status: array[1..19] of longint;
  szDbName, szDbParam: PANSIChar;
  dbHandle : pointer;
  rslt: longint;

  lDPBBuffer : ANSIString;
  lDPBLength : integer;

  cItem: ANSIChar;
  szRslt: PANSIChar;      //array[0..IBResultBufferSize-1] of ANSIChar;
begin
   Result := 0;
   dbHandle := nil;
   // init database parameter block with version number
   lDPBBuffer := '';
   SetLength(lDPBBuffer, 1);
   lDPBBuffer[1] := ANSIChar(isc_dpb_version1);
   lDPBLength := 1;

   // fill Database Parameter Buffer with user name/password
   lDPBBuffer := lDPBBuffer +
             ANSIChar(isc_dpb_user_name) +
             ANSIChar(Length(User)) +
             ANSIString( User );
   Inc(lDPBLength, 2 + Length(User));

   lDPBBuffer := lDPBBuffer +
             ANSIChar(isc_dpb_password) +
             ANSIChar(Length(Pswd)) +
             ANSIString( Pswd );
   Inc(lDPBLength, 2 + Length(Pswd));

   //Pointers naar naam + buffer
   szDbName  := PANSIChar(ANSISTring(DBName));
   szDbParam := PANSIChar( lDPBBuffer );

   // attach to the database and set dialect
   rslt := isc_attach_database(@status, 0, szDbName, @dbHandle, lDPBLength, szDbParam);
   if rslt <> 0 then
      raise EDatabaseError.Create('Error attaching database!  ISC# ' + IntToStr(rslt));

   //Haal sql dialect op
   szRslt := AllocMem(1000);
   try
      FillChar( szRslt^, 1000, 0);
      cItem := ANSIChar( isc_info_db_SQL_dialect );
      rslt := isc_database_info(@status, @DBHandle, 1, @cItem, 1000, szRslt);
      if rslt <> 0 then
         raise EDatabaseError.Create('Error retrieving database info !  ISC# ' + IntToStr(rslt));


      Result := Ord(szRslt[3]); //3e positie is dialect
   finally
      FreeMem(szRslt);
   end;

   // Drop the connection to the database
   rslt :=  isc_detach_database(@status, @dbHandle);
   if rslt <> 0 then
      raise EDatabaseError.Create('Error detaching database!  ISC# ' + IntToStr(rslt));
end;

示例 (2) 来自第三方库,该库似乎没有针对东京进行优化,
用枚举类型说明案例:
H2077 Value assigned to 'TppTemplate.StreamType' not used
请注意,将分配更改为Result := ftASCII;不会使提示消失(我最初的假设是它与first枚举值不正确)。

type TppFormatType = (ftBinary, ftASCII);

function TppTemplate.StreamType(aStream: TStream): TppFormatType;
var
  lSavePos: Integer;
begin
  {save stream position}
  lSavePos := aStream.Position;
  Result   := ftBinary;  

  try
    ComputeOffsetFromStream(aStream);

    aStream.Seek(FOffset, soBeginning);

    if IsValidASCIISignature(aStream) then
      Result := ftASCII

    else if IsValidBinarySignature(aStream) then
      Result := ftBinary

    else
      raise EInvalidTemplateError.Create(ppLoadStr(49));

  finally
    {restore stream position}
    aStream.Seek(lSavePos, soBeginning);
  end;
end; {function, StreamType}

共同点似乎是 try/finally 块中的结果分配。


考虑此代码并最小化您的场景的再现:

function Bar: Boolean;
begin
  Result := Random<0.5;
end;

function Foo: Integer;
begin
  Result := 0;
  if Bar then
    Result := 1
  else
    raise Exception.Create('');
end;

编译器,甚至是旧版本,都会发出以下提示:

[dcc32 提示]:H2077 分配给“Foo”的值从未使用过

这是合理的。第一个任务是Result毫无意义,可以删除。

现在考虑这个变体:

function Foo: Integer;
begin
  Result := 0;
  try
    if Bar then
      Result := 1
    else
      raise Exception.Create('');
  finally
  end;
end;

旧版本的编译器不再发出提示,但最新版本的编译器会发出提示。对于旧版本,这应该被视为编译器缺陷。的两个变体Foo上面显示的在语义上是相同的。编译器有理由生成相同的代码。

正如您所猜测的,作业位于try/finally需要阻止才能触发以前版本中的缺陷。

我们可以得出结论,Embarcadero 开发商已经修复了东京的一个缺陷。您可以通过删除虚假的初始分配来解决提示。

当然,如果您的代码既要由旧版本的编译器编译,又要由新版本的编译器编译,那么您就陷入了困境。按照现在的代码,新版本的编译器会发出提示。删除初始赋值,旧版本的编译器会发出提示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数初始化代码从西雅图更改为东京吗? 的相关文章

  • Indy FTP 传输类型

    我正在使用 IdFTP Indy 10 组件从远程位置下载一些文件 zip 和 txt 在获取每个文件之前 我将 TransferType 设置为二进制 IdFTP TransferType ftBinary IdFTP Get ASour
  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • 调用泛型类型的方法?

    为什么下面的代码在 Delphi XE 中会产生错误 unit UTest interface type TTest class public procedure Foo
  • Delphi如何使用其他窗体中的类型?

    抱歉 这是一个非常新手的问题 我正在对这个庞大的应用程序进行维护 它有5种不同的形式 我们将全局变量放在一个单元 uGlobal 中 但我似乎无法从数据单元 uData 访问它 我有这个 Unit uGlobal type TmyType
  • Delphi DataSnap REST 服务器从 TStream 返回 JSON 数组,而不是二进制

    我有一个与 Android 客户端通信的 REST 服务器 我将它从 XE3 ish 升级到 Berlin 其中一个服务器方法返回一个包含 jpeg 的 TStream 并且工作得很好 很高兴将图像作为二进制图像返回 升级到 Berlin
  • 如何将 JSON 字符串转换为图像?

    我有一个将图像转换为 JSON 数组的应用程序 并将其保存到 blob 字段中 function getImage String var memorystream TMemoryStream jsonArray TJSONArray beg
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 在 Delphi 2007 中将具有透明度的位图保存为 PNG

    我有一个包含透明度信息的 Delphi 位图 32 位 我需要将其转换并保存为 PNG 文件 同时保留透明度 我目前拥有的工具是graphics32 Library GR32 PNG 由Christian Budde 提供 和PNGImag
  • 使用 TStringList 的分隔符解析字符串,似乎也解析空格(Delphi)

    我有一个简单的字符串 由某个字符分隔 比如说逗号 我应该能够创建一个 TStringList 并将其分隔符设置为逗号 然后将 DelimitedText 设置为我想要解析的文本 并且应该自动解析它 问题是 当我查看输出时 它还包含空格作为分
  • Delphi - 如何获取 USB 可移动硬盘和记忆棒的列表?

    在我的应用程序 Delphi 中 我需要列出所有 USB 存储设备 这些可以是闪存棒or外部存储驱动器 有一个Jvcl成分JvDriveCombo 并且它有DriveType属性 问题是我是否选择DriveType Fixed那么除了外部驱
  • FreePascal x64 上系统单元函数的汇编调用

    我有一些 Delphi 汇编代码 可以在 Win32 Win64 和 OSX 32 上编译并正常工作 XE2 但是 由于我需要它在 Linux 上工作 所以我一直在考虑编译它的 FPC 版本 到目前为止 Win32 64 Linux32 6
  • 如何从 Delphi 中的函数返回对象而不导致访问冲突?

    我有一个返回 TStringList 的 delphi 函数 但是当我返回一个值并尝试使用它时 我收到一个访问冲突错误 即 myStringList FuncStringList myStringList Items Count lt Th
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone
  • 是否可以声明长度受限且不从 0/1 开始的字符串类型?

    在 Delphi 中 可以声明整数值的子范围 例如 type myInt 2 150 它将 myInt 类型的值限制为 2 到 150 之间的值 但是如果我想限制字符串的长度怎么办 如果我写 type myString string 150
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls
  • CharInSet 不适用于非英文字母?

    我已经将应用程序从 Delphi 2007 更新到 Delphi 2010 一切都很顺利 除了一条编译正常但不起作用的语句 If Edit1 Text 1 in S then ShowMessage Found else ShowMessa
  • 如何读取和更改 TEdit 控件的值?

    我有一个表格TForm1有 5TEdit and 2 TBitBtn 我还需要该程序 以便在输入数字数据后Edit1 and Edit2 on BitBtn1Click Edit1 and Edit2值将被求和并显示在Edit3 你想做这样

随机推荐

  • FileSystemWatcher 一段时间后停止引发事件

    我们构建了一个窗口服务来监听文件夹FileSystemWatcher 创建后我们处理文件等等 但几天后该活动停止工作 它有可能被垃圾收集器 GC 收集吗 GC 是否收集它的持有类 这是一个单例 我应该使用弱事件吗 我是否存在导致事件未注册的
  • 如何检测grails中渲染了哪个视图文件

    我必须知道grails 渲染时的视图文件 一种方法是过滤器中的 grails afterView 操作 在这里 我找不到一种方法来知道哪个视图文件已被渲染 那么 有没有什么方法可以让我知道哪个视图文件已被渲染方法渲染 这不太漂亮 但在大多数
  • 从 Word 中提取嵌入的 Excel 工作表数据

    我有一批嵌入了 Excel 工作表的 Word 文档 用户通过双击工作表图像并打开嵌入的 Excel 对象在 Excel 工作表中输入数据 我需要获取用户输入的数据 下面是 WORD VBA 其中引用了 Microsoft Excel 15
  • 预编译方面的语句与准备语句

    我理解使用Statement和PreparedStatement之间的主要区别 PreparedStatements允许传入参数 但我读到了两者之间的细微差别 即PreparedStatement 可以比通用语句更快 因为PreparedS
  • 使用对象的浅拷贝时出现双重释放错误...如何修复?

    如何从浅复制对象与原始对象中删除双重 删除 错误 一个简单的例子 class INT int p dynamic define here fancy constructors etc set int i p new int p i INT
  • 基于 WPF 和 MVVM 模式中的嵌套模型实体构建 ViewModel

    我在理解如何基于以下模型构建视图模型时遇到问题 我简化了模型以便更清晰 public class Hit public bool On get set public Track Track get set public class Trac
  • 使用 docker link 时拒绝连接到 RabbitMQ

    我有一个微服务应用程序 它有两个服务和一个用作它们之间通信的消息队列的rabbit mq 现在 我想将它们部署在docker上 我在以下代码中docker compose yml file 版本 3 服务 rabbitmq build Ra
  • 将自定义格式化程序类与 Python 的logging.config 模块结合使用

    我有以下日志记录类 当在代码中指定为格式化程序时 它可以正常工作 它通过在要记录的消息的开头添加一个字符串来扩展现有的格式化程序 以帮助显示消息的重要性 我不只是使用 levelname s在格式字符串中 因为我不想显示 DEBUG 或 I
  • XPath 选择全部,但不选择 self::strong 和 self::strong/following-sibling::text()

    所以我有以下示例 html 需要解析 div strong Title strong Sub Editor at NEWS ABC strong Name strong John strong Where strong Everywhere
  • “where id in(ids)”的性能?

    使用以下查询可以吗 表现如何 select from table where id not in 2000 or much more ids here 我的初始测试进行得非常快 但我想这是因为我是现在唯一使用该服务器的人 如果你有一个索引
  • 批处理脚本在失败时不会引发 ERRORLEVEL

    我正在学习 Windows 批处理脚本 当复制 移动或删除操作失败时 我需要引发错误 我制作了一个示例脚本 由于某种原因 当操作失败时 我无法使 ERRORLEVEL 上升 我运行脚本 文件要么不存在 要么在另一个程序中打开 并且 stde
  • ThreadPool.SetMinThreads 和 SetMaxThreads 以及核心数量

    我目前正在研究 Redis 为了调整其功能 我们需要更改 ThreadPool 的设置 特别是 Worker IOC 线程的最小数量 我们在 Azure Web 角色中托管应用程序 并将其一部分托管在辅助角色中 阅读 asp net 的文档
  • 将 css 类添加到多个元素

    我创建了一个名为 button 的 CSS 类 并通过简单地使用以下命令将其应用到我的所有 INPUT 标签 button input css stuff here p class button p
  • 如何单独使用 CSS 更改点击图像?

    我有一张图像 当单击该图像时 我想显示其下方的另一张图像 我正在寻找一个简单的 CSS 解决方案 那可能吗 TL DR input type checkbox content url http placekitten com 150 160
  • T-SQL如何防止删除表中的第一行

    我有一个这样的表 CREATE TABLE Users idUser int IDENTITY 1 1 PRIMARY KEY firstName varchar 40 NOT NULL secondName varchar 40 last
  • 用于移动设备的网络图表库,我们自己的研究[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在为我们被要求做的网络图表应用程序寻找一个很好的基于 javascript 的库 这些图表将是可
  • Flutter:如何循环遍历“DocumentSnapshot.data()”中的每个字段

    I have a collection where each user has their own document In the document I create a map for a new entry The document w
  • 在 AMP HTML 页面上嵌入带标记的地图

    目前 我使用 Google 地图 API 生成带有给定位置标记 给定一组纬度 经度坐标 的地图 在 AMP HTML 中 当前执行此操作的方法似乎是使用 amp iframe 扩展https github com ampproject am
  • http持久连接和ssl会话

    HTTP 是一种应用程序协议 底层的 TCP 连接可以关闭并重新打开 而不会影响 HTTP 应用程序 性能除外 通过使用 HTTP1 1 我们使用持久连接 但服务器或客户端仍然可以随时关闭连接 为了安全起见 HTTP 通过 SSL TLS
  • 函数初始化代码从西雅图更改为东京吗?

    我正在将代码从 Delphi 10 Seattle 升级到 Delphi 10 2 Tokyo 并得到很多 H2077 提示Value assigned to never used关于作业 即使在过去明确添加这些内容以消除 可能没有价值 警