【COM学习】之二、HRESULT,GUID
2013-08-09 21:24
537 查看
HRESULT 来向用户报告各种情况。 他的值位于 WINERROR.H中
QueryInterface返回一个HRESULT值。
HRESULT不是一个句柄,他是一个可分成三个域的32位值。 Here's the RESULT
其低16位包含函数返回的代码, 其余15位包含的是此类型及返回值起源的详细信息。
其结构为:
我们的应用程序在开发过程中,在WINERROR.H中查找HRESULT值的含义是可以的,但在某些情况下,应用需要一种获取与某个特定HRESULT值相应的徐哦呜消息并将其显示出来的方法。以显示标准COM错误消息,可以使用 FormatMessage Win32 API函数:
在使用HRESULT时, 函数在各种情况下返回的状态代码通常将包含多个成功代码及多个失败代码。 所以我们要使用SUCCEED 及 FAILED宏。 一般不能直接将HRESULT值同某个成功代码(S_OK)进行比较以决定某个函数是否成功,也不能直接将其同某个失败代码进行比较以决定函数是否失败。
GUID(Globally Unique Identifier 全局唯一标识符)
使接口的标识符是唯一的。
2013.8.9
jofranks 于南昌 未完待续
QueryInterface返回一个HRESULT值。
HRESULT不是一个句柄,他是一个可分成三个域的32位值。 Here's the RESULT
其低16位包含函数返回的代码, 其余15位包含的是此类型及返回值起源的详细信息。
其结构为:
我们的应用程序在开发过程中,在WINERROR.H中查找HRESULT值的含义是可以的,但在某些情况下,应用需要一种获取与某个特定HRESULT值相应的徐哦呜消息并将其显示出来的方法。以显示标准COM错误消息,可以使用 FormatMessage Win32 API函数:
//它的功能就是将GetLastError函数得到的错误信息(这个错误信息是数字代号)转化成字符串信息的函数。 DWORD WINAPI FormatMessage(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments); //dwFlags 标志位,决定如何说明lpSource参数,dwFlags的低位制定如何处理换行功能在输出缓冲区,也决定最大宽度的格式化输出行。 //lpSource 根据dwFlags标志而定。[1] dwMessageId 请求的消息的标识符。当dwFlags标志为FORMAT_MESSAGE_FROM_STRING时会被忽略。[1] dwLanguageId 请求的消息的语言标识符。 LPTSTR lpBuffer 接收错误信息描述的缓冲区指针。 nSize 如果FORMAT_MESSAGE_ALLOCATE_BUFFER标志没有被指定,这个参数必须指定为输出缓冲区的大小,如果指定,这个参数指定为分配给输出缓冲区的最小数。[1] Arguments 保存格式化信息中的插入值的一个数组。
void ErrorMessage(LPCTSTR str, HRESULT hr) { void *pMsgBuf; ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FORM_SYSTEM, NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&pMsgBuf, 0, NULL); cout << str << endl; cout << "error:" << (LPTSTR)pMsgBuf << endl; LocalFree(pMsgBuf); }
在使用HRESULT时, 函数在各种情况下返回的状态代码通常将包含多个成功代码及多个失败代码。 所以我们要使用SUCCEED 及 FAILED宏。 一般不能直接将HRESULT值同某个成功代码(S_OK)进行比较以决定某个函数是否成功,也不能直接将其同某个失败代码进行比较以决定函数是否失败。
HRESULT hr = CoCreateInstance(); if(hr == E_FAILED) ... // if(FAILED(hr) hr = PI->QueryInterface(); if(hr == S_OK) ... //if(SUCCEED(hr)) PI->Release();
GUID(Globally Unique Identifier 全局唯一标识符)
使接口的标识符是唯一的。
2013.8.9
jofranks 于南昌 未完待续
相关文章推荐
- 【COM学习】之二、HRESULT,GUID
- COM 技术内幕学习之六 (HRESULT,GUID)
- 这是我学习COM遇到的几个基本问题其解决 黄森堂(vcmfc)著 1.我用ATL生成一个组件对象,我在COM中使用IDD_IEncrypt,这个在哪里写义,是啥?GUID? 答:IDD_IEncry
- COM技术内幕--关于HRESULT、GUID、注册表及其他细节
- COM技术内幕第六章笔记-HRESULT、GUID、注册表及其他
- COM 技术内幕学习之二 (接口)
- 最近在ArcGIS Engine开发中关于调用gp工具过程出现COM 组件的调用返回了错误 HRESULT E_FAIL 错误的解决方法 和 学习oracle中遇到的一些问题总结
- ios学习--照片框架详解之二 —— PhotoKit 详解(下)
- AIX系统日志学习笔记之二
- geoprocessor(GP)工具提示“对 COM 组件的调用返回了错误 HRESULT E_FAIL”的几种情况
- 脑图学习架构设计之二:网站架构模式
- 系统学习JavaWeb之二初窥Servlet门径
- IOS学习总结分析之二:10.13-10.31第一部分
- COM中GUID和UUID、CLSID、IID
- ArcGIS “Error HRESULT E_FAIL has been returned from a call to a COM component.” 异常的解决
- C++程序员的C#转型手册之二:学习过程
- Linq to Sql 学习系列之二 DataContext与实体
- com学习2——正式接触com
- DirectShow 学习(一) COM实现部分和部分辅助源码浅读 (async例子)
- WCF 学习系列之二:WCF 入门级 使用教程 上