win32调用系统API发生了错误怎么办?

 https://www.cctry.com/thread-298311-1-1.html

有很多网友在写了几行代码调用几个函数之后,说程序崩溃了,或者函数执行发生错误了,但是却无从下手,不知道怎么去找原因。到这里问问,到那里问问?单纯看他的代码也看不出什么问题!
这种情况怎么办呢?要养成判断函数执行是否成功的习惯!除非这个函数真的是判断不了,比如:void Init(); 类似这样的函数可能确实没办法判断,那么我们也不用判断,这样的函数一般肯定会保证成功的。


养成判断函数执行是否成功的习惯:
大多数情况,我们自己定义的函数也好,还是系统提供给我们的API函数也好,如果不能保证100%成功,一般都会通过返回值返回或者参数返回的形式来判断是否执行成功。
例如:上节课给大家讲解的 DeleteFile 函数,如果遇到只读文件要删除,那么肯定会失败,DeleteFile 函数的返回值是 BOOL,返回 TRUE 表示成功,返回 FALSE 表示失败。
所以,我们在使用一个函数的时候,一定要对他执行完的状态进行判断,如果执行成功了我们做什么操作,如果执行失败了我们又该做什么操作。不然一味的认为函数肯定会执行成功那么继续往下走的话,很有可能引起程序的崩溃。


找到错误的原因:GetLastError:
对于一款成熟的软件或者产品来说,遇到某些函数执行错误了,我们能知道执行错误这是个进步,但是我们最终要能知道是什么错误才能想办法去解决对吧?不然你只知道有错误,却解决不了也是不行的,好人做到底,送佛送到西!
那么我们该如何知道执行的错误信息呢?这里就要用到编程中经常用到一个Api函数了:GetLastError



获取错误码函数:GetLastError:
函数原型:DWORD GetLastError(VOID);
无参数,返回值为 DWORD 双字的整型,表示错误码的值。针对函数执行遇到不同的错误, GetLastError 的返回值是不同的。
获取调用线程的最后错误代码值。 最后一个错误代码是基于每个线程维护的。 多个线程不会覆盖彼此的最后错误代码。


实战:
BOOL bRet = DeleteFile(_T("D:\\111111.txt"));
if (!bRet)
{
    DWORD dwErr = GetLastError();
    cout << "dwErr = " << dwErr << endl;
}


错误码有了,错误信息我们可以方便的获取到。微软为我们提供好了线程的工具:ErrorLookUp
具体使用:vs->工具->错误查找

最好使用 Windows 提供给我们的错误码的宏,而不是直接使用数值,数值以后可能会改变,用宏的话万无一失!
关键字查找办法:Win32 Error Code



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值