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