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 _com_error Class

The Visual C++ compiler-level support for COM includes a class called _com_error. In order to use this class, you must include comdef.h. Like the FormatMessage technique, this class allows you to display the error string of an associated HRESULT. Moreover, this class allows you to deal with COM exceptions via the IErrorInfo interface. An abbreviated class definition of _com_error follows:

class _com_error {
public:
   // Constructors
   _com_error(HRESULT hr, IErrorInfo* perrinfo = NULL) throw();

   // Accessors
   HRESULT Error() const throw();

   // IErrorInfo method accessors
   _bstr_t Description() const throw(_com_error);

   // FormatMessage accessors
   const TCHAR * ErrorMessage() const throw();

   . . .
};

Using this class, you can simply display the error message associated with the bad HRESULT by calling the _com_error::ErrorMessage method, as shown here:

HRESULT hr = pOcr->OcrImage(. . .);
if (FAILED(hr)) {
   _com_error error(hr);
   MessageBox(NULL, error.ErrorMessage(), L"Error", MB_OK);
}

The _com_error class is better than the FormatMessage technique because it can deal with COM exceptions via IErrorInfo. For example, the following code snippet is similar to the previous code. However, it is expanded to check for COM exception support that is provided by the object. Notice that if the object doesn’t support COM exceptions, you pass only the HRESULT into the constructor of _com_error, but if the object supports COM exceptions, you pass both the HRESULT and the IErrorInfo ...

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