c++ - 在命令行上将 HRESULT 作为字符串传递

标签 c++ windows hresult

我需要将 HRESULT 值作为命令行参数传递给程序。我本来打算通过传递十六进制值来做到这一点,例如:

>receiver.exe 0x80048836

我正在尝试使用 wcstol 将此字符串表示形式转换回 HRESULT,例如:

HRESULT hr = wcstol(argv[2], NULL, 16);

但是,原始 HRESULT 的值通常大于 LONG_MAX,因此在 hr 上面的行中最终为 0x7fffffff

那么,两个问题:

  1. 我以为 HRESULTS 只是 32 位整数?所以我不确定如何返回大于 LONG_MAX 的 HRESULT。不过,它似乎在原始程序中运行良好(即 HRESULT 不会溢出)。

  2. 有没有办法绕过 wcstolLONG_MAX 限制?也许该函数的另一个版本与 HRESULT 的实际大小整数相匹配?

谢谢!

最佳答案

查看 wcstoulhttp://msdn.microsoft.com/en-us/library/5k9xb7x1(v=VS.80).aspx HRESULT 确实适合 32 位,但在您给出的示例中,它使用了最高有效位,这被认为类似于有符号整数的符号位。使用 wcstoul 会将其装入无符号长整型。

LONG_MAX0x7FFFFFFF,可以放入 31 个最低有效位的最高位,让最高位清零,但 ULONG_MAX 上升到 0xFFFFFFFF 因为它是无符号的。

关于c++ - 在命令行上将 HRESULT 作为字符串传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047001/

相关文章:

MySQL 通知程序 : Error subscribing to WMI Events: RPC_E_CALL_CANCELLED. 异常 HRESULT:0x80010002

c++ - 为什么std::vector::iterator::operator->仅向下钻取一级?

c - 从子进程获取到父进程的路径

windows - postgres- 在管理员帐户下启动进程

exception - Visual Studio 2013 错误消息 : 0x80004001 (E_NOTIMPL)

c# - 尝试使用 COM 组件时出现识别错误 : 0x800442B6,

c++ - 获取内部对象内部的外部对象指针

c++ - IncludeOS hello world 失败

c++ - 是否可以枚举 wxWidgets 中的 wxFrame 子级?

windows - 调用未定义的函数 mysql_connect