Skip to Content
Learning DCOM
book

Learning DCOM

by Thuan L. Thai
April 1999
Intermediate to advanced
502 pages
15h 5m
English
O'Reilly Media, Inc.
Content preview from Learning DCOM

Using the FormatMessage Function

Recall that you must check the returned HRESULT for all COM API function and method invocations, because the HRESULT is an important element in determining what has gone wrong in the most recent COM-related call. In the following code snippet, if the returned HRESULT is bad, we call a special helper function, DisplayError, to display the error message associated with the HRESULT:

HRESULT hr = pOcr->OcrImage(. . .);
if (FAILED(hr)) DisplayError(hr);

To obtain the textual representation of a system-defined HRESULT, you can use the FormatMessage Win32 API function. Here’s the DisplayError helper function that uses FormatMessage to obtain the error string associated with a particular status code.

void DisplayError(HRESULT hr)
{
   if (hr == S_OK) return;

   if (HRESULT_FACILITY(hr) == FACILITY_WINDOWS)
      hr = HRESULT_CODE(hr);

   wchar_t *pwszStatus;
   // FormatMessageW is the Unicode version of FormatMessage.
   FormatMessageW(
      FORMAT_MESSAGE_ALLOCATE_BUFFER |
      FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,
      hr,
      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
      (LPWSTR)&pwszStatus,
      0,
      NULL
   );

   // MessageBoxW is the Unicode version MessageBox.
   MessageBoxW(NULL, pwszStatus, L"DisplayError", MB_OK);

   LocalFree(pwszStatus);
}

The previous code snippet displays the error string associated with an HRESULT. This information helps tremendously in debugging your code, since it presents to you the exact problem that has occurred in the last COM-related invocation. For example, if a piece of client code ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Learning Go

Learning Go

Jon Bodner
Effective C

Effective C

Robert C. Seacord
Learning Algorithms

Learning Algorithms

George Heineman

Publisher Resources

ISBN: 9781449307011Errata Page