Python exceptions through COM custom interface

P

Philip Rittenhouse

I have one last issue with pywin32 to report. The problem occurs with
Python COM servers raising COM exceptions across a custom interface.

Using the dispatch interface works fine, but in the custom interface
the exception's error information is lost. The problem appears to be
in PyGatewayBase::InterfaceSupportsErrorInfo() in PyGatewayBase.cpp. It
is called to determine whether the GetErrorInfo API should be used to
extract an error after an error HRESULT is returned from an interface.

The function is passed an IID of an interface, the code compares this to
the return value of GetIID() which is always IID_IUnknown. The
comparison fails, so the function returns S_FALSE and no error info is
extracted.

The comment above the definition of GetIID() says:
// Currently this is used only for ISupportErrorInfo,
// so hopefully this will never be called in this base class.
// (however, this is not a rule, so we wont assert or anything!)

But it appears that it is called in the base class (or at least
not overloaded by anyone inheriting from it).

Everything seems to work fine if you just change
InterfaceSupportsErrorInfo() to always return S_OK.

Can anyone tell me how this code is meant to work? Why is the check
against GetIID() in there at all?

Thanks!
Phil
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top