[python-win32] Problem with COM return value in python, but works fine in VB

David Powell davidanthonypowell at gmail.com
Tue Feb 17 07:51:06 CET 2009


Hello,

I am trying to automate the commercial software "CST Microwave Studio"
using win32com, on a 32 bit windows XP machine.  The program has a
reasonably well documented COM interface, and for example I am able to
run the following .vbs script, which shows the expected behaviour of
opening a new project and doesn't return any error messages:

Set app = CreateObject ("CSTStudio.Application")
Set mws = app.NewMWS

However, vbscript is far too primitive for what I want to do, so I
have translated this code to python using win32com:

import win32com.client
cst = win32com.client.Dispatch("CSTStudio.Application")
cst.NewMWS()

This results in the following error output:

Traceback (most recent call last):
  File "C:\Documents and Settings\dap124\Desktop\cst_com.py", line 19,
in <module>
    cst.NewMWS()
  File "C:\Python25\Lib\site-packages\win32com\client\dynamic.py",
line 508, in __getattr__
    return self._get_good_object_(ret)
  File "C:\Python25\Lib\site-packages\win32com\client\dynamic.py",
line 301, in _get_good_object_
    return self._get_good_single_object_(ob)
  File "C:\Python25\Lib\site-packages\win32com\client\dynamic.py",
line 289, in _get_good_single_obj
ect_
    return self._wrap_dispatch_(ob, userName, ReturnCLSID)
  File "C:\Python25\Lib\site-packages\win32com\client\__init__.py",
line 125, in _wrap_dispatch_
    return Dispatch(ob, userName, returnCLSID,None)
  File "C:\Python25\Lib\site-packages\win32com\client\__init__.py",
line 96, in Dispatch
    return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo,
clsctx=clsctx)
  File "C:\Python25\Lib\site-packages\win32com\client\__init__.py",
line 43, in __WrapDispatch
    return dynamic.Dispatch(dispatch, userName, WrapperClass,
typeinfo, clsctx=clsctx)
  File "C:\Python25\Lib\site-packages\win32com\client\dynamic.py",
line 121, in Dispatch
    typecomp = typeinfo.GetTypeComp()
AttributeError: 'NoneType' object has no attribute 'GetTypeComp'
>>>

This seems to happen regardless of which version of pywin32 I use, or
whether I run it from ipython, or the normal python console.  It does
actually perform the desired action of opening a new project in the
CST program, and it seems that the error has something to do with the
returned value which I need for further communication over the COM
interface.

I also tried using the comtypes package, which results in the following code:

Set app = CreateObject ("CSTStudio.Application")
Set mws = app.NewMWS

This results in the following error output:

Traceback (most recent call last):
  File "C:\Documents and Settings\dap124\Desktop\cst_com.py", line 23,
in <module>
    cst.NewMWS()
  File "C:\Python25\Lib\site-packages\comtypes\client\dynamic.py",
line 95, in __getattr__
    result = self._comobj.Invoke(dispid, _invkind=flags)
  File "C:\Python25\Lib\site-packages\comtypes\automation.py", line
699, in Invoke
    return result._get_value(dynamic=True)
  File "C:\Python25\Lib\site-packages\comtypes\automation.py", line
349, in _get_value
    return Dispatch(ptr)
  File "C:\Python25\Lib\site-packages\comtypes\client\dynamic.py",
line 28, in Dispatch
    tinfo = obj.GetTypeInfo(0)
  File "C:\Python25\Lib\site-packages\comtypes\automation.py", line
599, in GetTypeInfo
    return result.QueryInterface(comtypes.typeinfo.ITypeInfo)
  File "C:\Python25\Lib\site-packages\comtypes\__init__.py", line
1069, in QueryInterface
    self.__com_QueryInterface(byref(iid), byref(p))
ValueError: NULL COM pointer access
>>>

Does anyone have any suggestions as to why python is failing here?  I
appreciate that it is hard to know what a closed source program is
doing with it's interface, but if anyone understands anything from the
above error messages which may help me, then I would be most
appreciative

regards

David


More information about the python-win32 mailing list