[python-win32] Trouble Automating Alibre CAD package

Thomas Heller theller at python.net
Wed Jul 12 13:22:41 CEST 2006


duanek at chorus.net schrieb:
> Hello,
> 
> I am trying to use pywin32 to automate a CAD package from Alibre (www.alibre.com) called Design Express.
> 
> The documentation I can get is written for Visual Basic (and not all that well at that), and I get the following error from the following lines:
> 
> [Python Code]
>         import win32com.client
>                         AlibreObject=win32com.client.Dispatch(r"AlibreX.AutomationHook")
> [End Python code]
> 
> Error traceback:
>     AlibreObject = win32com.client.Dispatch(r"AlibreX.AutomationHook")
>   File "C:\Python24\Lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
>     dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
>   File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName
>     return (_GetGoodDispatch(IDispatch, clsctx), userName)
>   File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 78, in _GetGoodDispatch
>     IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
> pywintypes.com_error: (-2147467262, 'No such interface supported', None, None)
> 

The problem seems that the COM object that Alibre implements is buggy.  According to the
type library (I've installed the free Express version) the call above should return an
object that implements the IAutomationHook interface, which is derived from IDispatch:

[
  odl,
  uuid(424539A8-7014-4174-B0BF-F5EE5BB71DF5),
  helpstring("IAutomationHook interface"),
  dual,
  oleautomation
]
interface IAutomationHook : IDispatch {
    [id(0x00000001), propget, helpstring("Returns the automation root")]
    HRESULT Root([out, retval] IDispatch** ppRoot);
    [id(0x00000002), helpstring("Initiates a new Alibre Design Automation client")]
    HRESULT Initialize(
                    [in] BSTR serverURL, 
                    [in] BSTR loginID, 
                    [in] BSTR passwd, 
                    [in] VARIANT_BOOL disableSecureMode, 
                    [in] int unused);
    [id(0x00000003), helpstring("Initiates a new Debug client")]
    HRESULT InitializeDebug(
                    [in] BSTR serverURL, 
                    [in] BSTR loginID, 
                    [in] BSTR passwd, 
                    [in] VARIANT_BOOL disableSecureMode, 
                    [in] int unused);
};

Experiments with comtypes (the ctypes com framework) show that the
object can successfully be QueryInterface'd for IAutomationHook, but not
for IDispatch.  I'm not sure pywin32 can handle such a buggy object,
but you could probably try to run makepy on the typelib and then
create the object.  Others may have more knowledge if or how this
would work.

Thomas



More information about the Python-win32 mailing list