Delphi 编译器警告将有符号传递给无符号

标签 delphi delphi-xe6

我最近尝试在我的应用程序中使用范围检查,试图捕获数组边界违规等。

不幸的是,这导致了很多与 HRESULT 相关的非错误:

var
    hr: HRESULT;
begin
    hr := E_UNEXPECTED;
    ShowMessage(SysErrorMessage(hr));

SysErrorMessage 的调用失败,并出现 ERangeError。那是因为:

HRESULT = type Longint;  { from wtypes.h }

function SysErrorMessage(ErrorCode: Cardinal): string;

手动类型转换

解决方案很简单:每次将 HRESULT 传递给 SysErrorMessage 时,手动强制转换为 Cardinal

这对于我正在处理的当前项目中的代码来说已经足够好了 - 搜索 SysErrorMessage 并扫描结果以查找我可能传递 HRESULT 的位置:

enter image description here

但是当共享库中有代码时它会失败。当我将有符号传递给无符号的其他结构时,它也会失败,反之亦然。

编译器可以告诉我吗?

当我混合有符号和无符号类型时,编译器是否有一个警告选项来捕获?显然我将禁用范围检查。

另请参阅

奖金

所有WinSock函数返回整数:

int WSAAPI getaddrinfo(
  _In_opt_       PCSTR      pNodeName,
  _In_opt_       PCSTR      pServiceName,
  _In_opt_ const ADDRINFOA  *pHints,
  _Out_          PADDRINFOA *ppResult
);

and

int WSAGetLastError(void);

Jcl/Jvcl 有很多修复工作要做。

最佳答案

Does the compiler have a warning option to catch when i mix signed and unsigned types?

W1024将收集混合算术和比较。但编译时没有任何赋值或参数传递的东西,这和赋值本质上是一样的。

关于Delphi 编译器警告将有符号传递给无符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32461771/

相关文章:

delphi - MouseDown 时光标没有变化

delphi - 修剪 BOLD_CLOCKLOG 表

delphi - 如何在 "uses"子句中创建子库?

delphi - 使用单个命令锁定和解锁资源

delphi - 将 UnicodeString 转换为 AnsiString

delphi - 如何使我的文件 DropSouce 被所有与文件一起使用的目标接受?

delphi - 如何在其他组件后面显示视频?

delphi - TPanel 在包含 TWebBrowser 时不会自动调整大小

android - Firemonkey Android 获取电池电量

delphi - 当最后一个值为空时 String.Split 工作很奇怪