一、函数错误机制

一、错误代码的获取      

      对于调用某些Windows函数,不论成功与否,都会有一个与之对应的代码值来标识函数的调用情况,是成功或是失败,如果失败,则可根据该值进一步获取失败的原因。代码值的获取通过调用函数GetLastError,该函数是线程安全的,因为获取的是主调线程中的错误代码值,其原理是使用线程本地存储区来存放了错误代码值。另外,对于某些函数(如CreateEvent),函数调用成功后也可以调用GetLastError函数来获取相应的额外信息。在VS中可以在程序调试下状态的Watch窗口中输入"$err,hr"可实时查看Windows函数对于错误代码的设置情况.

二、错误代码的设置

      与之对应的错误代码值的设置即通过SetLastError函数来实现,所以,我们可以将这一机制用于我们自己的函数或者库中供他人使用,不过值得注意的是,对于错误代码值设置有一定的要求,每个比特位都是有含义的。

三、错误代码的翻译

      当我们获取到一个错误代码值需要知道其含义时,这时就可以利用FormatMessage函数来实现,该函数主要用来格式化消息,或根据错误代码获取对应的消息含义后再进行格式化(格式化是可选的,根据实际情况而定)。该函数获取消息的来源主要有三处:1、给定的内存缓冲区;2、已加载模块(exe、dll等)的消息资源表中;3、系统消息资源表

      windows系统自带了一个名为netmsg.dll的模块,该模块包含与网络相关的错误代码的消息文件表,其错误代码范围为:NERR_BASE(2100) --- MAX_NERR(2100 + 899).

四、创建错误代码的消息文件表资源

      1、创建消息文本文件,即.mc文件;

      2、利用VS自带的消息编译工具Message Compiler(MC.exe) 对.mc文件进行编译并生成.rc的资源文件和相应的头文件;

      3、将头文件和资源文件放入到模块(dll或exe)所在的工程中,将其编译在一起,这样后面就可以在该模块中查找错误代码信息了。

具体例子可参见 https://blog.csdn.net/a812073479/article/details/79688218

猜你喜欢

转载自blog.csdn.net/a812073479/article/details/79687876