在ARM64架构上,VarI4FromStr函数在处理最低的long值时可能会出现故障。这是因为ARM64架构上的long类型的最小值是-9223372036854775808,而该值无法被转换为32位有符号整数。
为了解决这个问题,可以使用VarI8FromStr函数来代替VarI4FromStr函数。VarI8FromStr函数可以将字符串转换为64位有符号整数。以下是一个示例代码:
#include
#include
int main()
{
BSTR str = SysAllocString(L"-9223372036854775808");
LONG64 value;
HRESULT hr = VarI8FromStr(str, LOCALE_USER_DEFAULT, 0, &value);
if (SUCCEEDED(hr))
{
std::cout << "Value: " << value << std::endl;
}
else
{
std::cout << "Conversion failed with HRESULT: 0x" << std::hex << hr << std::endl;
}
SysFreeString(str);
return 0;
}
在这个示例中,我们使用VarI8FromStr函数将字符串“-9223372036854775808”转换为64位有符号整数。如果转换成功,将打印出转换后的值;否则,将打印出转换失败的HRESULT值。
请注意,VarI8FromStr函数的参数中,第一个参数是BSTR类型的字符串,第二个参数是区域设置,第三个参数是标志位,最后一个参数是用于存储转换结果的变量的地址。
希望这个解决方法对你有帮助!