winapi – Windows中的错误 – DWORD(GetLastError)vs HRESULT v
我在Win32 WTL中做了一些编程,我对可用类型的错误感到困惑.
一般来说,我想检查一个错误,并将其提供给AtlGetErrorDescription(调用FormatMessage). 我的问题是: >有什么区别? > DWORD,由GetLastError返回. >我可以将哪些类型的错误提供给FormatMessage?它的签名表示它接受HRESULT,但是有很多示例,其中GetLastError的返回值直接传递到FormatMessage.
他们只是反映在
Windows中使用的不同的API:
> GetLastError()返回一个winapi错误代码.一个从1开始的简单数字.它们通常从底层的本机api错误代码映射.像ERROR_FILE_NOT_FOUND从STATUS_OBJECT_NAME_NOT_FOUND文件系统驱动程序错误代码映射. Winapi错误代码在WinError.h SDK头文件中声明.您可以指望使用FORMAT_MESSAGE_FROM_SYSTEM选项从FormatMessage()获取描述性字符串.> HRESULT是一个COM错误代码.它由三个基本部分构成,高位表示严重性,中间位编码指示错误源的设施,低16位编码错误编号. HRESULT_FROM_WIN32()宏是一个帮助宏,用于将winapi错误代码映射到COM错误代码.它将严重性设置为“fail”,设备代码设置为7(winapi),并将错误代码复制到低位.有很多可能的COM错误代码,只有少数可以通过FormatMessage()转换为字符串.您应该使用ISupportErrorInfo接口询问COM服务器是否可以通过IErrorInfo提供错误的描述.> LSTATUS是模糊的,RegCreateEx实际上返回LONG,只是winapi的错误代码.它会弹出一些shell包装函数,如SHGetValue().为什么shell团队做的事情往往是非常不清楚的.>在您的问题中没有提及,但值得注意的是由本机api生成的错误代码.它们记录在ntstatus.h SDK头文件中. winapi应该包含本机api,但是这些错误代码有时会偷看边缘,特别是在异常中.大多数任何程序员都看到了0xc0000005(STATUS_ACCESS_VIOLATION)异常代码. 0xc00000fd与本网站的名称相符.只要不是由驱动程序生成的自定义错误代码,FormatMessage()可以将常用的转换为字符串.有几个apis使用这些错误代码,即使它们在用户模式下运行.常见的例子是WIC和媒体基金会,否则没有强烈的暗示,为什么他们喜欢这样.获取一个这样的错误代码的字符串需要使用FormatMessage与FORMAT_MESSAGE_FROM_HMODULE选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 从孤立存储中延迟加载列表框图像
- 在Windows下使用gcc安装gtk并进行编译?
- windows-server-2008 – 返回HTTP 503的Microsoft SSTP VPN
- 如何在Windows上比较目录/文件和权限?
- WINDOWS配置WSUS。
- windows-server-2008 – 访问被拒绝的问题,Windows Server
- 在Windows上更改位置_viminfo文件
- windows-server-2003 – Windows 2003/2008 DC或路由器中的
- windows-phone-8 – WP8应用程序是否有任何认证工具包?
- windows-server-2008 – 域用户可以RDP进入域控制器吗?
- 在现有2008R2中添加Windows Server 2012 DC而不更
- Windows server 2016 活动目录备份及恢复
- 多方视频对话使用skype web sdk在线发布Skype fo
- windows – 为什么tracert延迟不会增加ping延迟?
- windows – 为什么输出传输时某些“for”命令不起
- windows-7 – 如何在批处理文件中使用start命令?
- active-directory – 远程桌面连接被拒绝,因为用
- windows下一个tomcat版本创建多个实例
- windows-phone-7 – 在Windows Phone 7中测试连接
- windows-server-2008-r2 – 提供大量文件的最佳实