zoukankan      html  css  js  c++  java
  • 【COM学习】之二、HRESULT,GUID

    HRESULT 来向用户报告各种情况。   他的值位于  WINERROR.H中

    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 于南昌        未完待续

  • 相关阅读:
    My first blog in cnblog
    浅析JavaScript中this储存
    input 文本框密码框的只读属性
    Js 数组——filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()
    jquery使用$.getJson()跨域大数据量请求方法
    JS中关于clientWidth offsetWidth scrollWidth 等的含义及区别
    JS性能优化
    npm 创建 node.js 项目
    css 垂直居中的几种方法
    字符串转数组
  • 原文地址:https://www.cnblogs.com/riskyer/p/3249241.html
Copyright © 2011-2022 走看看