COM component implementing custom interfaces
Daniel Piñol Laserna
dpinol at hotmail.com
Wed Jul 3 12:24:59 EDT 2002
I tried to write a simple COM component with the code below.
I'm able to correctly instantiate from VB (createinstance), but when
trying to cast it to interface ICapeUnitEdit (QueryInterface( , it
always fails.
any idea?
from win32com.gen_py.CAPEOPEN093 import ICapeUnitEdit
import win32com.gen_py.CAPEOPEN093
class HyCOGentsUnit:
_public_attrs_ = ['softspace', 'noCalls']
_readonly_attrs_ = ['noCalls']
# _com_interfaces_ = ['ExtnUnitOperation','ExtensionObject']
_com_interfaces_ = [win32com.gen_py.CAPEOPEN093.ICapeUnitEdit.CLSID]
#, pythoncom.IID_IDispatch]
_reg_clsid_ = "{1C4697A2-6673-11D6-8DE9-0000865F4838}"
_reg_desc_ = "HYSYS COGents Proxy"
_reg_progid_ = "HYSYS.COGentsProxy"
_public_methods_ = ['Edit']
def __init__(self):
self.softspace = 1
self.noCalls = 0
def Edit(self):
self.noCalls = self.noCalls + 1
def Hello(self, who):
self.noCalls = self.noCalls + 1
# insert "softspace" number of spaces
return "Hello" + " " * self.softspace + str(who)
if __name__=='__main__':
# ni only for 1.4!.'4A5E2E81-C093-11d4-9F1B-0010A4D198C2'
import win32com.server.register, win32com.gen_py
win32com.server.register.UseCommandLine(HyCOGentsUnit)
This is my interface
class ICapeUnitEdit(DispatchBaseClass):
"""ICapeUnitEdit Interface"""
CLSID = pythoncom.MakeIID('{678C0A9A-0093-11D2-A67D-00105A42887F}')
def Edit(self):
"""Displays the graphic interface"""
return self._oleobj_.InvokeTypes(0x1, LCID, 1, (24, 0), (),)
_prop_map_get_ = {
}
_prop_map_put_ = {
}
This is the error I get:
>>> Registered: HYSYS.COGentsProxy
>>> Dispatch("HYSYS.COGentsProxy")
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "d:\dani\AppDev\python\APython22\Lib\site-packages\win32com\client\__init__.py",
line 92, in Dispatch
dispatch, userName =
dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "d:\dani\AppDev\python\APython22\Lib\site-packages\win32com\client\dynamic.py",
line 81, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "d:\dani\AppDev\python\APython22\Lib\site-packages\win32com\client\dynamic.py",
line 72, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx,
pythoncom.IID_IDispatch)
com_error: (-2147467259, 'Unspecified error', None, None)
More information about the Python-list
mailing list