标题:[分享][转帖]姬老师资料的译文2
只看楼主
Victoy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2005-7-7
 问题点数:0 回复次数:0 
[分享][转帖]姬老师资料的译文2

老式代码并不是通过GetLastError来报告错误。微软也没有采取所谓的“修整”措施来提供错误处理。这意味着在WIN98中有许多的函数没有设错误码。设有错误码的函数会返回能说明错误的值,这样我们就可以检测,但是事实上,我们不能决定造成这一错误的原因。

有些函数调用成功有几种可能。例如,成功的创建一个指定的系统事件对象有两种可能一是你确实创建了,另一个可能是你同名的一个对象已经存在。这时你的应用程序可能需要知道成功的原因。为了返回这种停息,微软采用了最后错误码的机构。如果函数成功,可以调用GetLastError来得到额处的信息。对于那些具有这些行为的函数,SDK明确的说明可以这样使用。举个CreateFile函数的例子:

在调试时,我发现跟踪线程的最后错误码极为有用。在MS VC 60中,工具DEBUGGER

技持了一个非常有用的功能,===你能够通过打开Watch Window来显示线程的最后错误码值并且还显示相应文本停息。要实现这一功能,可以在Watch Window中选中一行并用键盘打入“@error”。看看表1—1。你会看到我所调用的CreatFile.这个函数返回一个值为INVALID_HANDLE_VALUE(-1)的句柄(又一次要把它译成带个把柄的句子,真无耐^_^,这表明不能打开指定的文件。这样视窗(Watch Window,偷懒了)展现出来的 LastErrorCode0x00000002. 视窗进一步指出“系统不能找到指定的文件”你将会注意到这些字符停息与winerror.h文件中2号错误码提到的信息是一样的------呵呵。

1—1 是利用VC的视窗来查看当前线程的错误码的。

Vstudio 还配有一个工具叫Error Lookup。你可以使用它来把错误码转化为人类可以看懂的文字信息。

如果这与的应用程序中检测到错误,我会把具体的文字信息显示给用户(不是像INVALID_HANDLE_VALUE这样的错误号,人类真的很难decode出来的)。系统也提供了一个很有很有用的函数名叫FormatMessage,它可以把错误码变成具体的信息。看下表:

DWORD FormatMessage(WORD dwFlags,PCVOID pSource,DWORD dwMessageId,

DWORD dwLanguageId, PTSTR pszBuffer,

DWORD nSize, va_list* Arguments);

这个函数事实上功能强大并且也是一个比较受到大家菁莱的给用户构造字符信息的方法。最起码有一点可以说明它是很有用的,呵呵。那就是它可以轻松的处理多国语言。这个函数检测用户喜好的语言(这种喜好语言在控制面板的区域中设置,唉-------这不是多余吗?)然后返回相应的文本(汉语的当然不会返回西文)。当然,你首先要自已翻译然后再把翻译好的信息来源表嵌入你的.EXE.DLL块中,但这样函数就会选择你关心的那个信息表了。在这一章后,ErroShow例子会说明如何用这个函数来把error code number 译成文件本的。

现在以后也会有人时常问我,是不是微软已经建立了一张包含了所有函数产生的错误码的万能表(我也想知道:0)回答是,很遗憾,没有!更重要的是,微软也不会这样做。因为建立这样一个表太难了,并且随着Window的天天update,要唯护它也是很难的。(晕!原来微软也有头疼的时候,呵呵。真没用)

啊!!!!!!编那么一张表的难题是,当调用一个函数时,这个函数可能会内部偷偷调用另一个函数,这样一个接一个的神不知鬼不觉的进行下去。这样任何一个函数都有出错的可能,出错的原因也有很多很多。有时候当一个函数出错时,高级别的函数可以恢复继续执行下去。

微软要建立这么一张表,首先就要跟踪每一函数可能出现的错误。这是困难的。系统的更新,函数的执行路径也会改变。

好了,先翻译到这吧,累了。希望你们能喜欢!!!!更诚恳你们能给予指证,在这里我感谢颐老师能为我们提供好好的学习资料,真是长知识呀。

搜索更多相关主题的帖子: 译文 转帖 老师 资料 分享 
2005-10-31 19:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-32103-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.790396 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved