我需要将 HRESULT 值作为命令行参数传递给程序。我本来打算通过传递十六进制值来做到这一点,例如:
>receiver.exe 0x80048836
我正在尝试使用 wcstol
将此字符串表示形式转换回 HRESULT,例如:
HRESULT hr = wcstol(argv[2], NULL, 16);
但是,原始 HRESULT 的值通常大于 LONG_MAX
,因此在 hr
上面的行中最终为 0x7fffffff
。
那么,两个问题:
我以为 HRESULTS 只是 32 位整数?所以我不确定如何返回大于
LONG_MAX
的 HRESULT。不过,它似乎在原始程序中运行良好(即 HRESULT 不会溢出)。有没有办法绕过
wcstol
的LONG_MAX
限制?也许该函数的另一个版本与 HRESULT 的实际大小整数相匹配?
谢谢!
最佳答案
查看 wcstoul
。 http://msdn.microsoft.com/en-us/library/5k9xb7x1(v=VS.80).aspx
HRESULT 确实适合 32 位,但在您给出的示例中,它使用了最高有效位,这被认为类似于有符号整数的符号位。使用 wcstoul
会将其装入无符号长整型。
LONG_MAX
是 0x7FFFFFFF
,可以放入 31 个最低有效位的最高位,让最高位清零,但 ULONG_MAX
上升到 0xFFFFFFFF
因为它是无符号的。
关于c++ - 在命令行上将 HRESULT 作为字符串传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047001/