[python-win32] Newbee problem on dispatch interface

Johannes Brunen jbrunen at datasolid.de
Mon Jun 20 16:30:55 CEST 2005


Hi,

I have a problem connecting to a COM server with a small test script using python 2.3.5 as well as 2.4.1:

import win32com.client
from win32com.client import gencache

def main():
    g1  = gencache.EnsureModule('{9C3BB401-114D-11D4-AC72-00105A4925FC}', 0, 1, 3)

    theCADdy = win32com.client.Dispatch('CADdy.CADdy')
    print repr(theCADdy)						# => <COMObject CADdy.CADdy>
    theCADdy = g1.ICADdy(theCADdy)				# => <win32com.gen_py.CADdyCOM 1.3 (CADdy) Type Library.ICADdy instance at 0x21362568>
    print repr(theCADdy)
    v1 = theCADdy.VersionNo

if __name__ == '__main__':
    main()


I got the following error message:

C:\Programme\Python\lib\site-packages\win32com\client\__init__.py in __getattr__(self, attr)
    453                 if args is None:
    454                         raise AttributeError, "'%s' object has no attribute '%s'" % (repr(self), attr)
--> 455                 return self._ApplyTypes_(*args)
    456
    457         def __setattr__(self, attr, value):

C:\Programme\Python\lib\site-packages\win32com\client\__init__.py in _ApplyTypes_(self, dispid, wFlags, retType, argTypes, user, resultCLSID, *args)
    444         def _ApplyTypes_(self, dispid, wFlags, retType, argTypes, user,
    445                      resultCLSID, *args):
--> 446                 return self._get_good_object_(
    447                     self._oleobj_.InvokeTypes(
    448                               dispid, 0, wFlags, retType, argTypes, *arg
s),

com_error: (-2147319779, 'Bibliothek nicht registriert.', None, None)
WARNING: Failure executing file: <Test3.py>

I have no idea what is going wrong with my test program. Connecting to MS Excel is no problem. Can someone tell me how do I correctly use the pythonCOM
module. I have no problem connecting the CADdy COM server from VB and C++. Is there anything wrong inside my COM type libraries?

With best regards 

Johannes



The following is the information about the type library provided by the OLE viewer:

// Generated .IDL file (by the OLE/COM Object Viewer)
// 
// typelib filename: CADdy.tlb

[
  uuid(9C3BB401-114D-11D4-AC72-00105A4925FC),
  version(1.3),
  helpstring("CADdyCOM 1.3 (CADdy) Type Library")
]
library CADDYLib
{
    // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");

    // Forward declare all types defined in this typelib
    interface ICADdyAddIn;
    interface ICADdy;
    interface IEnumCADdyAddIn;
    interface ICADdyAddIns;
    interface ISupportErrorInfo;

    typedef enum {
        ADDIN_E_ERRONEOUSADDIN = -2147220992,
        ADDIN_E_ALREADYSTARTED = -2147220991,
        ADDIN_E_INAPPROPRIATESERVER = -2147220990,
        ADDIN_E_CANTCREATESERVER = -2147220989
    } ADDINHRESULTS;

    [
      odl,
      uuid(14F65AE1-4671-11D4-8B1A-00105A49278B),
      helpstring("ICADdyAddIn Interface"),
      dual,
      oleautomation
    ]
    interface ICADdyAddIn : IDispatch {
        [id(0x00000001), helpstring("method Init")]
        HRESULT Init([in] ICADdy* theCADdy);
        [id(0x00000002), helpstring("method Exit")]
        HRESULT Exit();
        [id(0x00000003), propget, helpstring("property CLSID")]
        HRESULT CLSID([out, retval] BSTR* pcCLSID);
        [id(0x00000004), propget, helpstring("property ProgID")]
        HRESULT ProgId([out, retval] BSTR* pcProgId);
        [id(0x00000005), propget, helpstring("property Description")]
        HRESULT Description([out, retval] BSTR* pcDescription);
    };

    [
      odl,
      uuid(D330F3E0-0F91-11D4-AC6E-00105A4925FC),
      helpstring("ICADdy Interface"),
      dual,
      oleautomation
    ]
    interface ICADdy : IDispatch {
        [id(0x00000001), propget, helpstring("property FrameManager")]
        HRESULT FrameManager([out, retval] IDispatch** ppICADdyFrameManager);
        [id(0x00000002), propget, helpstring("property ModelManager")]
        HRESULT ModelManager([out, retval] IDispatch** ppICADdyModelManager);
        [id(0x00000003), propget, helpstring("property UIManager")]
        HRESULT UIManager([out, retval] IDispatch** ppICADdyUIManager);
        [id(0x00000004), propget, helpstring("property Manager")]
        HRESULT Manager(
                        [in] BSTR __MIDL_0025, 
                        [out, retval] IDispatch** ppICADdyDimensionManager);
        [id(0x00000005), propget, helpstring("property ExeDirectory")]
        HRESULT ExeDirectory([out, retval] BSTR* pbstrDirectory);
        [id(0x00000006), propget, helpstring("property HomeDirectory")]
        HRESULT HomeDirectory([out, retval] BSTR* pbstrDirectory);
        [id(0x00000007), propget, helpstring("property Name")]
        HRESULT Name([out, retval] BSTR* pbstrName);
        [id(0x00000008), propget, helpstring("property VersionNo")]
        HRESULT VersionNo([out, retval] long* lVersion);
        [id(0x00000009), propget, helpstring("property ReleaseNo")]
        HRESULT ReleaseNo([out, retval] long* lRelease);
    };

    [
      odl,
      uuid(14F65AE3-4671-11D4-8B1A-00105A49278B),
      helpstring("IEnumCADdyAddIn Interface"),
      oleautomation
    ]
    interface IEnumCADdyAddIn : IUnknown {
        [helpstring("Next")]
        HRESULT _stdcall Next(
                        [in] unsigned long i4Count, 
                        [out] ICADdyAddIn** __MIDL_0015, 
                        [out] unsigned long* pi4Fetched);
        [helpstring("Skip")]
        HRESULT _stdcall Skip([in] unsigned long __MIDL_0016);
        [helpstring("Reset")]
        HRESULT _stdcall Reset();
        [helpstring("Clone")]
        HRESULT _stdcall Clone([out] IEnumCADdyAddIn** __MIDL_0017);
    };

    [
      odl,
      uuid(14F65AE2-4671-11D4-8B1A-00105A49278B),
      helpstring("ICADdyAddIns Interface"),
      dual,
      nonextensible,
      oleautomation
    ]
    interface ICADdyAddIns : IDispatch {
        [id(00000000), propget, helpstring("Item")]
        HRESULT Item(
                        [in] long __MIDL_0018, 
                        [out, retval] ICADdyAddIn** __MIDL_0019);
        [id(0xfffffffc), propget, restricted, helpstring("_NewEnum")]
        HRESULT _NewEnum([out, retval] IUnknown** __MIDL_0020);
        [id(0x00000001), propget, helpstring("property Count")]
        HRESULT Count([out, retval] long* __MIDL_0021);
        [id(0x00000002), helpstring("Start")]
        HRESULT Start(
                        [in] BSTR __MIDL_0022, 
                        [out, retval] ICADdyAddIn** __MIDL_0023);
        [id(0x00000003), helpstring("Stop")]
        HRESULT Stop([in] ICADdyAddIn* __MIDL_0024);
        [id(0x00000004), helpstring("StopAll")]
        HRESULT StopAll();
    };

    [
      uuid(D330F3E1-0F91-11D4-AC6E-00105A4925FC),
      helpstring("CADdy Class"),
      noncreatable
    ]
    coclass CoCADdy {
        [default] interface ICADdy;
        interface ISupportErrorInfo;
    };

    [
      odl,
      uuid(DF0B3D60-548F-101B-8E65-08002B2BD119)
    ]
    interface ISupportErrorInfo : IUnknown {
        HRESULT _stdcall InterfaceSupportsErrorInfo([in] GUID* riid);
    };

    [
      uuid(3F5B2591-4768-11D4-8B1C-00105A49278B),
      helpstring("CADdyAddIn Collection")
    ]
    coclass CADdyAddIns {
        [default] interface ICADdyAddIns;
        interface ISupportErrorInfo;
    };
};

And the python file generated by g1  = gencache.EnsureModule('{9C3BB401-114D-11D4-AC72-00105A4925FC}', 0, 1, 3)

# -*- coding: mbcs -*-
# Created by makepy.py version 0.4.91
# By python version 2.3.5 (#62, Mar 22 2005, 21:53:13) [MSC v.1200 32 bit (Intel)]
# From type library '{9C3BB401-114D-11D4-AC72-00105A4925FC}'
# On Mon Jun 20 16:06:02 2005
"""CADdyCOM 1.3 (CADdy) Type Library"""
makepy_version = '0.4.91'
python_version = 0x20305f0

import win32com.client.CLSIDToClass, pythoncom
import win32com.client.util
from pywintypes import IID
from win32com.client import Dispatch

# The following 3 lines may need tweaking for the particular server
# Candidates are pythoncom.Missing and pythoncom.Empty
defaultNamedOptArg=pythoncom.Empty
defaultNamedNotOptArg=pythoncom.Empty
defaultUnnamedArg=pythoncom.Empty

CLSID = IID('{9C3BB401-114D-11D4-AC72-00105A4925FC}')
MajorVersion = 1
MinorVersion = 3
LibraryFlags = 8
LCID = 0x0

class constants:
	ADDIN_E_ALREADYSTARTED        =-2147220991 # from enum ADDINHRESULTS
	ADDIN_E_CANTCREATESERVER      =-2147220989 # from enum ADDINHRESULTS
	ADDIN_E_ERRONEOUSADDIN        =-2147220992 # from enum ADDINHRESULTS
	ADDIN_E_INAPPROPRIATESERVER   =-2147220990 # from enum ADDINHRESULTS

from win32com.client import DispatchBaseClass
class ICADdy(DispatchBaseClass):
	"""ICADdy Interface"""
	CLSID = IID('{D330F3E0-0F91-11D4-AC6E-00105A4925FC}')
	coclass_clsid = IID('{D330F3E1-0F91-11D4-AC6E-00105A4925FC}')

	# The method Manager is actually a property, but must be used as a method to correctly pass the arguments
	def Manager(self, _MIDL_0025_=defaultNamedNotOptArg):
		"""property Manager"""
		ret = self._oleobj_.InvokeTypes(4, LCID, 2, (9, 0), ((8, 1),),_MIDL_0025_)
		if ret is not None:
			ret = Dispatch(ret, 'Manager', None, UnicodeToString=0)
		return ret

	_prop_map_get_ = {
		"ExeDirectory": (5, 2, (8, 0), (), "ExeDirectory", None),
		"FrameManager": (1, 2, (9, 0), (), "FrameManager", None),
		"HomeDirectory": (6, 2, (8, 0), (), "HomeDirectory", None),
		"ModelManager": (2, 2, (9, 0), (), "ModelManager", None),
		"Name": (7, 2, (8, 0), (), "Name", None),
		"ReleaseNo": (9, 2, (3, 0), (), "ReleaseNo", None),
		"UIManager": (3, 2, (9, 0), (), "UIManager", None),
		"VersionNo": (8, 2, (3, 0), (), "VersionNo", None),
	}
	_prop_map_put_ = {
	}

class ICADdyAddIn(DispatchBaseClass):
	"""ICADdyAddIn Interface"""
	CLSID = IID('{14F65AE1-4671-11D4-8B1A-00105A49278B}')
	coclass_clsid = None

	def Exit(self):
		"""method Exit"""
		return self._oleobj_.InvokeTypes(2, LCID, 1, (24, 0), (),)

	def Init(self, theCADdy=defaultNamedNotOptArg):
		"""method Init"""
		return self._oleobj_.InvokeTypes(1, LCID, 1, (24, 0), ((9, 1),),theCADdy)

	_prop_map_get_ = {
		"CLSID": (3, 2, (8, 0), (), "CLSID", None),
		"Description": (5, 2, (8, 0), (), "Description", None),
		"ProgId": (4, 2, (8, 0), (), "ProgId", None),
	}
	_prop_map_put_ = {
	}

class ICADdyAddIns(DispatchBaseClass):
	"""ICADdyAddIns Interface"""
	CLSID = IID('{14F65AE2-4671-11D4-8B1A-00105A49278B}')
	coclass_clsid = IID('{3F5B2591-4768-11D4-8B1C-00105A49278B}')

	# Result is of type ICADdyAddIn
	# The method Item is actually a property, but must be used as a method to correctly pass the arguments
	def Item(self, _MIDL_0018_=defaultNamedNotOptArg):
		"""Item"""
		ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((3, 1),),_MIDL_0018_)
		if ret is not None:
			ret = Dispatch(ret, 'Item', '{14F65AE1-4671-11D4-8B1A-00105A49278B}', UnicodeToString=0)
		return ret

	# Result is of type ICADdyAddIn
	def Start(self, _MIDL_0022_=defaultNamedNotOptArg):
		"""Start"""
		ret = self._oleobj_.InvokeTypes(2, LCID, 1, (9, 0), ((8, 1),),_MIDL_0022_)
		if ret is not None:
			ret = Dispatch(ret, 'Start', '{14F65AE1-4671-11D4-8B1A-00105A49278B}', UnicodeToString=0)
		return ret

	def Stop(self, _MIDL_0024_=defaultNamedNotOptArg):
		"""Stop"""
		return self._oleobj_.InvokeTypes(3, LCID, 1, (24, 0), ((9, 1),),_MIDL_0024_)

	def StopAll(self):
		"""StopAll"""
		return self._oleobj_.InvokeTypes(4, LCID, 1, (24, 0), (),)

	_prop_map_get_ = {
		"Count": (1, 2, (3, 0), (), "Count", None),
	}
	_prop_map_put_ = {
	}
	# Default method for this class is 'Item'
	def __call__(self, _MIDL_0018_=defaultNamedNotOptArg):
		"""Item"""
		ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((3, 1),),_MIDL_0018_)
		if ret is not None:
			ret = Dispatch(ret, '__call__', '{14F65AE1-4671-11D4-8B1A-00105A49278B}', UnicodeToString=0)
		return ret

	# str(ob) and int(ob) will use __call__
	def __unicode__(self, *args):
		try:
			return unicode(self.__call__(*args))
		except pythoncom.com_error:
			return repr(self)
	def __str__(self, *args):
		return str(self.__unicode__(*args))
	def __int__(self, *args):
		return int(self.__call__(*args))
	def __iter__(self):
		"Return a Python iterator for this object"
		ob = self._oleobj_.InvokeTypes(-4,LCID,2,(13, 10),())
		return win32com.client.util.Iterator(ob)
	def _NewEnum(self):
		"Create an enumerator from this object"
		return win32com.client.util.WrapEnum(self._oleobj_.InvokeTypes(-4,LCID,2,(13, 10),()),'{14F65AE1-4671-11D4-8B1A-00105A49278B}')
	def __getitem__(self, index):
		"Allow this class to be accessed as a collection"
		if not self.__dict__.has_key('_enum_'):
			self.__dict__['_enum_'] = self._NewEnum()
		return self._enum_.__getitem__(index)
	#This class has Count() property - allow len(ob) to provide this
	def __len__(self):
		return self._ApplyTypes_(*(1, 2, (3, 0), (), "Count", None))
	#This class has a __len__ - this is needed so 'if object:' always returns TRUE.
	def __nonzero__(self):
		return True

from win32com.client import CoClassBaseClass
# This CoClass is known by the name 'AddIns.CADdyAddIns.1'
class CADdyAddIns(CoClassBaseClass): # A CoClass
	# CADdyAddIn Collection
	CLSID = IID('{3F5B2591-4768-11D4-8B1C-00105A49278B}')
	coclass_sources = [
	]
	coclass_interfaces = [
		ICADdyAddIns,
	]
	default_interface = ICADdyAddIns

# This CoClass is known by the name 'CADdy.CADdy.1'
class CoCADdy(CoClassBaseClass): # A CoClass
	# CADdy Class
	CLSID = IID('{D330F3E1-0F91-11D4-AC6E-00105A4925FC}')
	coclass_sources = [
	]
	coclass_interfaces = [
		ICADdy,
	]
	default_interface = ICADdy

ICADdy_vtables_dispatch_ = 1
ICADdy_vtables_ = [
	(('FrameManager', 'ppICADdyFrameManager'), 1, (1, (), [(16393, 10, None, None)], 1, 2, 4, 0, 28, (3, 0, None, None), 0)),
	(('ModelManager', 'ppICADdyModelManager'), 2, (2, (), [(16393, 10, None, None)], 1, 2, 4, 0, 32, (3, 0, None, None), 0)),
	(('UIManager', 'ppICADdyUIManager'), 3, (3, (), [(16393, 10, None, None)], 1, 2, 4, 0, 36, (3, 0, None, None), 0)),
	(('Manager', '__MIDL_0025', 'ppICADdyDimensionManager'), 4, (4, (), [(8, 1, None, None), (16393, 10, None, None)], 1, 2, 4, 0, 40, (3, 0, None, None), 0)),
	(('ExeDirectory', 'pbstrDirectory'), 5, (5, (), [(16392, 10, None, None)], 1, 2, 4, 0, 44, (3, 0, None, None), 0)),
	(('HomeDirectory', 'pbstrDirectory'), 6, (6, (), [(16392, 10, None, None)], 1, 2, 4, 0, 48, (3, 0, None, None), 0)),
	(('Name', 'pbstrName'), 7, (7, (), [(16392, 10, None, None)], 1, 2, 4, 0, 52, (3, 0, None, None), 0)),
	(('VersionNo', 'lVersion'), 8, (8, (), [(16387, 10, None, None)], 1, 2, 4, 0, 56, (3, 0, None, None), 0)),
	(('ReleaseNo', 'lRelease'), 9, (9, (), [(16387, 10, None, None)], 1, 2, 4, 0, 60, (3, 0, None, None), 0)),
]

ICADdyAddIn_vtables_dispatch_ = 1
ICADdyAddIn_vtables_ = [
	(('Init', 'theCADdy'), 1, (1, (), [(9, 1, None, "IID('{D330F3E0-0F91-11D4-AC6E-00105A4925FC}')")], 1, 1, 4, 0, 28, (3, 0, None, None), 0)),
	(('Exit',), 2, (2, (), [], 1, 1, 4, 0, 32, (3, 0, None, None), 0)),
	(('CLSID', 'pcCLSID'), 3, (3, (), [(16392, 10, None, None)], 1, 2, 4, 0, 36, (3, 0, None, None), 0)),
	(('ProgId', 'pcProgId'), 4, (4, (), [(16392, 10, None, None)], 1, 2, 4, 0, 40, (3, 0, None, None), 0)),
	(('Description', 'pcDescription'), 5, (5, (), [(16392, 10, None, None)], 1, 2, 4, 0, 44, (3, 0, None, None), 0)),
]

ICADdyAddIns_vtables_dispatch_ = 1
ICADdyAddIns_vtables_ = [
	(('Item', '__MIDL_0018', '__MIDL_0019'), 0, (0, (), [(3, 1, None, None), (16393, 10, None, "IID('{14F65AE1-4671-11D4-8B1A-00105A49278B}')")], 1, 2, 4, 0, 28, (3, 0, None, None), 0)),
	(('_NewEnum', '__MIDL_0020'), -4, (-4, (), [(16397, 10, None, None)], 1, 2, 4, 0, 32, (3, 0, None, None), 1)),
	(('Count', '__MIDL_0021'), 1, (1, (), [(16387, 10, None, None)], 1, 2, 4, 0, 36, (3, 0, None, None), 0)),
	(('Start', '__MIDL_0022', '__MIDL_0023'), 2, (2, (), [(8, 1, None, None), (16393, 10, None, "IID('{14F65AE1-4671-11D4-8B1A-00105A49278B}')")], 1, 1, 4, 0, 40, (3, 0, None, None), 0)),
	(('Stop', '__MIDL_0024'), 3, (3, (), [(9, 1, None, "IID('{14F65AE1-4671-11D4-8B1A-00105A49278B}')")], 1, 1, 4, 0, 44, (3, 0, None, None), 0)),
	(('StopAll',), 4, (4, (), [], 1, 1, 4, 0, 48, (3, 0, None, None), 0)),
]

IEnumCADdyAddIn_vtables_dispatch_ = 0
IEnumCADdyAddIn_vtables_ = [
	(('Next', 'i4Count', '__MIDL_0015', 'pi4Fetched'), 1, (1, (), [(19, 1, None, None), (16393, 2, None, "IID('{14F65AE1-4671-11D4-8B1A-00105A49278B}')"), (16403, 2, None, None)], 1, 1, 4, 0, 12, (3, 0, None, None), 0)),
	(('Skip', '__MIDL_0016'), 2, (2, (), [(19, 1, None, None)], 1, 1, 4, 0, 16, (3, 0, None, None), 0)),
	(('Reset',), 3, (3, (), [], 1, 1, 4, 0, 20, (3, 0, None, None), 0)),
	(('Clone', '__MIDL_0017'), 4, (4, (), [(16397, 2, None, "IID('{14F65AE3-4671-11D4-8B1A-00105A49278B}')")], 1, 1, 4, 0, 24, (3, 0, None, None), 0)),
]

ISupportErrorInfo_vtables_dispatch_ = 0
ISupportErrorInfo_vtables_ = [
	(('InterfaceSupportsErrorInfo', 'riid'), 1610678272, (1610678272, (), [(36, 1, None, None)], 1, 1, 4, 0, 12, (3, 0, None, None), 0)),
]

RecordMap = {
}

CLSIDToClassMap = {
	'{14F65AE1-4671-11D4-8B1A-00105A49278B}' : ICADdyAddIn,
	'{D330F3E1-0F91-11D4-AC6E-00105A4925FC}' : CoCADdy,
	'{D330F3E0-0F91-11D4-AC6E-00105A4925FC}' : ICADdy,
	'{14F65AE2-4671-11D4-8B1A-00105A49278B}' : ICADdyAddIns,
	'{3F5B2591-4768-11D4-8B1C-00105A49278B}' : CADdyAddIns,
}
CLSIDToPackageMap = {}
win32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap )
VTablesToPackageMap = {}
VTablesToClassMap = {
	'{14F65AE2-4671-11D4-8B1A-00105A49278B}' : 'ICADdyAddIns',
	'{14F65AE3-4671-11D4-8B1A-00105A49278B}' : 'IEnumCADdyAddIn',
	'{D330F3E0-0F91-11D4-AC6E-00105A4925FC}' : 'ICADdy',
	'{DF0B3D60-548F-101B-8E65-08002B2BD119}' : 'ISupportErrorInfo',
	'{14F65AE1-4671-11D4-8B1A-00105A49278B}' : 'ICADdyAddIn',
}


NamesToIIDMap = {
	'ICADdyAddIn' : '{14F65AE1-4671-11D4-8B1A-00105A49278B}',
	'ICADdy' : '{D330F3E0-0F91-11D4-AC6E-00105A4925FC}',
	'ISupportErrorInfo' : '{DF0B3D60-548F-101B-8E65-08002B2BD119}',
	'IEnumCADdyAddIn' : '{14F65AE3-4671-11D4-8B1A-00105A49278B}',
	'ICADdyAddIns' : '{14F65AE2-4671-11D4-8B1A-00105A49278B}',
}

win32com.client.constants.__dicts__.append(constants.__dict__)



____________
Virus checked by G DATA AntiVirusKit


More information about the Python-win32 mailing list