wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了winapi – Windows中的错误 – DWORD(GetLastError)vs HRESULT vs LSTATUS大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我在Win32 WTL中做了一些编程,我对可用类型的错误感到困惑. 一般来说,我想检查一个错误,并将其提供给AtlGetErrorDescription(调用FormatmessagE). 我的问题是: >有什么区别? > DWORD,由GetLastError返回. > HRESULT,由例如CAtlFile包装器,它使用HRESULT_FROM_WIN32从DWORD转换. > LSTATUS
我在Win32 WTL中做了一些编程,我对可用类型的错误感到困惑.

一般来说,我想检查一个错误,并将其提供给AtlGetErrorDescription(调用FormatmessagE).

我的问题是:

>有什么区别?

> DWORD,由GetLastError返回.
> HRESULT,由例如CAtlFile包装器,它使用HRESULT_FROM_WIN32从DWORD转换.
> LSTATUS,由例如regCreateKeyEx.

>我可以将哪些类型的错误提供给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选项.

大佬总结

以上是大佬教程为你收集整理的winapi – Windows中的错误 – DWORD(GetLastError)vs HRESULT vs LSTATUS全部内容,希望文章能够帮你解决winapi – Windows中的错误 – DWORD(GetLastError)vs HRESULT vs LSTATUS所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。