Python exceptions through COM custom interface

Philip Rittenhouse phil at dspfactory.com
Wed Jun 30 16:39:55 EDT 2004


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





More information about the Python-list mailing list