>>>>> "Paul" == Paul Rudin <pa********@scientia.com> writes:
I'm having a problem with the python wrappers generated from a
type library.
The symptom is that I get failures to find connections points
inside the wrappers when called from DispatchWithEvents or
WithEvents - e.g. "com_error: (-2147220992,
'CONNECT_E_NOCONNECTION', None, None)"
It seems that the coclass_clsid property of some classes is
incorrect. It seems that when a coclass in the type library has
multiple "[source] dispinterface" it can happen that this
coclass can end up as the one referenced by each of the
corresponding DispatchBaseClass subclasses via the coclass_clsid
property, whereas probably what should happen is that only ones
that are default should be so treated.
But maybe I'm misdiagnosing the problem; has anyone else seen
this and/or know what the problem is?
To test this I had a quick look at the code that generates the
wrappers. In win32com/client/genpy.py The class Generator has a method
_Build_CoClassChildren. Replacing the line:
dispItem.coclass_clsid = coclass.clsid
with the lines:
if flags & pythoncom.IMPLTYPEFLAG_FDEFAULT:
dispItem.coclass_clsid = coclass.clsid
seems to solve the problem, although perhaps this breaks something
else?