COM Question - QueryInterface?

Stefan Migowsky smigowsky at dspace.de
Tue Jun 8 08:01:51 EDT 1999


Hi, 

you get the IDispatch interface with this call prtoviding
you have an IUnknown.

>>>import pythoncom
>>>IUnk
   <PyIUnknown at 0x3bf86a4 with obj at 0x837ab0>
>>>IUnk.QueryInterface(pythoncom.IID_IDispatch)    # Query IDispatch
   <PyIDispatch at 0x3bf4d54 with obj at 0x837ab0>
>>>IUnk.QueryInterface(pythoncom.IID_IDispatch).QueryInterface(pythoncom.IID
_IUnknown) # Query IUnkown again
   <PyIUnknown at 0x3bf86a4 with obj at 0x837ab0>

You just have to get hold off at least one interface object.
If you use the wrapper classes generated by makepy you can get the 
interface by using the _oleobj_ attribute e.g:

>>>from win32com.client import Dispatch
>>>drives = Dispatch("AmAccess.Drives")
>>>drives._oleobj_
   <PyIDispatch at XXX with obj at XXX>

Hope this helps

   Stefan



> ----------
> Von: 	Chris Tavares[SMTP:]
> Gesendet: 	Dienstag, 8. Juni 1999 03:17:58
> An: 	python-list at cwi.nl
> Betreff: 	COM Question - QueryInterface?
> 
> I've got a (hopefully easy) question about python's COM support.
> 
> I'm developing a COM object in C++ which implements the COM collection
> idiom - an Item method that returns another object. The code in Python
> I'm using is something like this:
> 
> from win32com.client import Dispatch
> drives = Dispatch("AmAccess.Drives")
> drive = drives.Item("c:")
> dir = drive.Item("some-area")
> 
> On this last line, I get an AttributeError for Item.
> 
> I think I know the reason why - the interface returned from 
> Drives.Item
> isn't a dual, it's an oleautomation compatible vtable interface.
> IDispatch on that object is implemented separately. So, PythonCOM sees
> the VT_UNKNOWN return type and wraps a PYIUnknown object around it. I
> need to be able to do a QueryInterface for IDispatch.
> 
> How do I get Python to do that? There's a PyIID type, but 
> apparently it
> only works for class or progids.  Anyone got any suggestions?
> 
> Thanks for any help,
> 
> -Chris
> 
> 
> 




More information about the Python-list mailing list