关于GetLastError的学习

今天在使用RegCreateKey这个函数的时候遇到一个问题,RegCreateKey函数运行失败,但是GetLastError的返回值为0

代码如下:

HKEY hKey =NULL;
CString strError ;
LONG errorNum = RegCreateKey(HKEY_LOCAL_MACHINE,
        		     _T("Software\\http://www.helloworld.com\\newCreate"),
        		     &hKey) ;
if (errorNum != ERROR_SUCCESS) 
{
  DWORD dwErrorNum = ::GetLastError() ; 
  strError.Format(_T("GetLastError()获取的错误码为:%d\nRegCreateKey调用失败,错误码为:%d"),
                  dwErrorNum, errorNum) ;
  MessageBox(strError, _T("提示"), MB_OK) ;
  return ;
}

结果如下:

经过向猪头三老师请教,才慢慢有所开悟,呵呵...

函数返回值用来判断函数成功或者失败,根据RegCreateKey函数msdn文档可知根据它的返回值来判断它的成败。返回值为ERROR_SUCCESS就成功,返回其它非零值就失败,失败的话,返回值就是相应错误码。到这里根据msdn的解释可以写代码为:
if (errorNum != ERROR_SUCCESS)
{
   FormatMessage(...);
}
关于GetLastError为什么返回0,推测是和相应函数的内部代码有关。看了GetLastError的msdn文档,并没有说如果返回0就代表函数成功。我觉得GetLastError是用来获得相应函数的扩展错误信息的,如果为0,只是表示它没有其它错误信息。之前我总是有这样的概念,使用GetLastError来判断函数是否成功。但是判断函数是否成功还是应该以msdn文档为准。很多函数的说明中,都有这样一句:If the function fails, the return value is zero. To get extended error information, call GetLastError.而RegCreateKey中不是这样写的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值