GetLastError是微软提供的一个检测错误的API。
1、原本以为GetLastError是针对进程的,还担心在多线程环境下导致获得错误代码不准确,因为正确执行的代码也可以改变错误代码,但是今天用心看了一下,发现GetLastError是针对线程的,错误代码号码是存储在线程本地存储器中的,即使多线程环境下的线程切换也不会改变它。呵呵,看样子看书还是要认真仔细啊。
2、GetLastError能获得错误代码号码,然后使用FormatMessage将其转换为相应的错误信息,这个很好,但是有多少人使用了微软提供的SetLastError呢?我们编写程序的时候,更多的是捕获了异常,然后处理、屏蔽之,虽然可以通过BOOL或者其他类型的函数返回值告诉调用者一些信息。但是一旦不能处理之,我们时候应该告诉调用者,相应的错误信息呢?更不要说是使用微软提供的方案定义自己的错误信息。
3、FormatMessage提供的能够通过参数确定显示的错误信息的语种的这种功能又是怎么实现的呢?如果说FormatMessage操作的是WinError.h文件,那么文件中的错误信息好像都是英文的,难道它能有精确的翻译机制?估计应该是OS中也有相关的错误信息的保存的地方。注意MAKELANGID。
4、线程的本地存储器机制让我们在使用VC调试器的时候可以在Watch窗口中直接输入"@err,hr",获得错误代码和错误信息,但是我使用了多少呢?