1、常见的Windows函数返回值数据类型:
---VOID:这个函数不可能失败。极少数的Windows函数返回值为VOID。
---BOOL:函数失败返回值为0,否则返回一个非0值。应避免测试返回值是否为TRUE。应该检查它是否不为FALSE。
---HANDLE:函数失败返回值为NULL,否则,HANDLE将标识一个可以操纵的对象。某些函数会返回INVALID_HANDLE_VALUE的一个句柄值,它被定义为-1。
---PVOID:函数调用失败返回值为NULL,否则,PVOID将标识一个数据块的内存地址。
---LONG/DWORD:返回计数的函数通常会返回一个LONG或DWORD。如果函数出于某种原因不能对我们想要计数的东西进行计数,它通常会返回0或-1。
2、在内部,当Windows函数检测到错错误时,它会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起。这种机制使不同的线程能够独立运行,互不干扰对方的错误代码。函数返回时,其返回值会指出已发生一个错误。
3、DWORD GetLastError( );
此函数返回由上一个函数调用设置的线程的32位错误代码。
Windows函数失败以后,应该马上调用GetLastError,因为假如又调用了另一个Windows函数,则此值很可能被改写。
4、在Visual Studio的Watch窗口中使用$err,hr来查看当前线程的“上一个错误代码”。
利用Error Lookup工具可以将错误代码转换为相应的文本描述。
5、DWORD FormatMessage(
DWORD dwFlags,
LPCVOID pSource,
DWORD dwMessageId,
DWORD dwLanguageId,
PTSTR pszBuffer,
DWORD nSize,
va_list *Arguments);
此函数可以将错误代码转换为相应的文本描述。可以返回传入的错误代码对应的字符串的首地址。
6、VOID SetLastError( DWORD dwErrCode);
此函数允许我们将线程局部存储区的错误代码设置为我们传递的值,之后调用GetLastError( )返回的就是我们刚刚设置的值。