Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Using python as a COM client

0 views
Skip to first unread message

mhur...@roadnet.com

unread,
Sep 22, 1999, 3:00:00 AM9/22/99
to
I spent some time today learning how to use python as a COM client.
It's pretty straight-forward, but I did have a little bit of a learning
curve when I tried to use secondary dispinterfaces. I am posting here
so that an example is available on Deja News.


I have an ATL object that implements a primary dispinterface as
IMsgBoxObj, and a secondary dispinterface as IMsgBoxObj2. It answers a
query for IDispatch by returning IMsgBoxObj. Here's the IDL :


[
object,
uuid(1F17E70E-676E-11D3-AC59-00500462ECB1),
dual,
helpstring("IMsgBoxObj Interface"),
pointer_default(unique)
]
interface IMsgBoxObj : IDispatch
{
[id(1), helpstring("method ShowMsgBox")] HRESULT ShowMsgBox();
};

[
object,
uuid(F2570840-70C3-11d3-AC59-00500462ECB1),
dual,
helpstring("IMsgBoxObj2 Interface"),
pointer_default(unique)
]
interface IMsgBoxObj2 : IDispatch
{
[id(2), helpstring("method ShowMsgBox2")] HRESULT ShowMsgBox2();
};

[
uuid(1F17E700-676E-11D3-AC59-00500462ECB1),
version(1.0),
helpstring("MsgBoxObject 1.0 Type Library")
]
library MSGBOXOBJECTLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(1F17E70F-676E-11D3-AC59-00500462ECB1),
helpstring("MsgBoxObj Class")
]
coclass MsgBoxObj
{
[default] interface IMsgBoxObj;
interface IMsgBoxObj2;
};
};

The following python script can be used to exercise the object :

#--------------------------------------------------------------------
# multiple dispinterface client

import pythoncom
import win32com.client

# create a MsgBoxObj, ask it for the object's default dispinterface
# (by requesting IDispatch), and wrap the interface
# reference in an object that knows how to a dispinterface

IMsgBoxObj = win32com.client.Dispatch("MsgBoxObject.MsgBoxObj")

IMsgBoxObj.ShowMsgBox()


# now ask for a different dispinterface on the same object

IID_IMsgBoxObj2 = pythoncom.MakeIID("{F2570840-70C3-11d3-AC59-
00500462ECB1}")

dispinterface2 = IMsgBoxObj._oleobj_.QueryInterface(IID_IMsgBoxObj2,
pythoncom.IID_IDispatch)

IMsgBoxObj2 = win32com.client.Dispatch(dispinterface2,
resultCLSID=IID_IMsgBoxObj2)

IMsgBoxObj2.ShowMsgBox2()

#--------------------------------------------------------------------


Hope this is of some use...

Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

0 new messages