COM/win32all QueryInterface

Ellers ellers at
Mon Jan 6 08:54:31 CET 2003

Hi All

Maybe this is easy but I can't figure out how to take a COM IUnknown
object returned by a method call and use QueryInterface to get a
useful object back.

The Demo.MyWorker and Demo.MyConcreteClass are simplifications of a
real type library written in C++ (ATL7, MSStudio7). Everything works
if I do it in C++ but in python I can't do anything useful with the
object I get back.

Some code is below ...

worker = win32com.client.Dispatch( "Demo.MyWorker" )
( unk ) = worker.DoWork( \
mod = win32com.client.gencache.GetModuleForTypelib('{MYLBHERE-3D73-4FAE-808D-BA528C308670}',
0, 1, 0)
actualObject = unk.QueryInterface( mod.MyConcreteClass.CLSID,
pythoncom.IID_IDispatch )

print "Actual:", actualObject 
# prints something like <PyIDispatch at 0xcd39e4 with obj at 0x1492bc>

# Count is a property on the object - this will fail with:
#    AttributeError: get_Count
# I've tried all sorts of variants - GetCount, Count, Count() etc.

I thought IDispatch would dynamically figure out the Count property
and map get_Count, Count etc?

I'd rather it use a concrete (or pseudo-concrete?) class from the
makepy generated module (makepy works fine with the module BTW), e.g.:

   actualObject = unk.QueryInterface( mod.MyConcreteClass.CLSID,


 but I can't figure out how to use QueryInterface to return a handle
to the python generated class with prior knowledge of
attributes/methods of the COM class.

Any tips greatly appreciated

More information about the Python-list mailing list