如何获取 hr(HRESULT hr;)的值??
调用那个API可以把hr的值显示出来 也可以

解决方案 »

  1.   

    hr就等于某个API函数的返回指,随便看
      

  2.   

    HRESULT是数据类型LONG,显示什么?
      

  3.   

    这个需要结合FormatMessage来显示:
    比如:
    HRESULT hr = 2;//错误2是:系统找不到指定的文件。
    ShowErrorMessage(hr);void CXXXXDlg::ShowErrorMessage(LONG hr)
    {
    TCHAR szBuf[80] = {0}; 
    LPVOID lpMsgBuf = NULL; FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    hr,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR) &lpMsgBuf,
    0, NULL );
    wsprintf(szBuf, _T("error %d: %s"), hr, lpMsgBuf); 
    MessageBox(szBuf, _T("Error"), MB_OK); 
    LocalFree(lpMsgBuf);
    }
    结果的对话框就会显示:“error 2:系统找不到指定的文件。”
      

  4.   

    上面只是随便举例给定了2,一般HRESULT的结果会显示其对应的字符串。
    如:
    S_OK           Operation successful 0x00000000 
    E_UNEXPECTED   Unexpected failure 0x8000FFFF 
    E_NOTIMPL      Not implemented 0x80004001 
    E_OUTOFMEMORY  Failed to allocate necessary memory 0x8007000E 
    E_INVALIDARG   One or more arguments are invalid 0x80070057 
    E_NOINTERFACE  No such interface supported 0x80004002 
    E_POINTER      Invalid pointer 0x80004003 
    E_HANDLE       Invalid handle 0x80070006 
    E_ABORT        Operation aborted 0x80004004 
    E_FAIL         Unspecified failure 0x80004005 
    E_ACCESSDENIED General access denied error 0x80070005 
      

  5.   

    用TRACE试试看.
     TRACE("hr = l%",hr);