ima*_*ett 1 c++ windows string getlasterror
最小的例子:
#include <Windows.h>
#include <string>
int main(int /*argc*/, char* /*argv*/[]) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //Behavior the same, with or without.
DWORD err = GetLastError();
std::string str;
return (int)err; //returns 127 iff line above uncommented, 0 iff commented
}
Run Code Online (Sandbox Code Playgroud)
此程序返回127,对应于ERROR_PROC_NOT_FOUND("无法找到指定的过程.").请注意,err设置之前的std::string创建.该程序使用MSVC 2017以调试模式编译.
这种行为有望吗?如果没有,我可以得到一些确认(然后,我会提交错误报告)吗?
GetLastError()返回由此线程调用的WinAPI函数设置的最后一个错误代码.请注意,WinAPI函数在成功时不一定要设置代码:
大多数函数仅在失败时调用SetLastError或SetLastErrorEx.
您尚未调用失败的WinAPI函数.因此,错误代码是不确定的.它要么是未初始化的(意味着未定义的行为),要么是由未知函数设置(仅略微不那么无意义).标准库使用异常来指示错误,而不是Windows API.
"预计会出现这种情况吗?"
由于函数未在适当的上下文中使用,因此任何值都是可接受的,这种行为是预期的.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |