4

我正在尝试使用 win32com 模块与专有应用程序的 COM 接口进行交互。我可以使用动态代理(win32com.client.Dispatch)连接到界面,这似乎可以工作。但是,如果我可以使用静态代理会很有用,尤其是因为它填充了 help() 页面。

我可以与动态代理正常交互:

>>> import win32com.client
>>> aqt = win32com.client.Dispatch("Aquator.Application")
>>> db = aqt.LoadDatabase(Folder=r"D:\Shared", Name="AquatorExcel.mdb")
>>> db.Name
u'D:\\Shared\\AquatorExcel.mdb'
>>> db.GetProjectList()
(1, (3,), (u'A simple model',))

但是当我使用使用 EnsureDispatch 或 makepy 脚本生成的静态代理时,我收到此错误:

>>> import win32com.client
>>> aqt = win32com.client.gencache.EnsureDispatch("Aquator.Application")
>>> db.Name
u'D:\\Shared\\AquatorExcel.mdb'
>>> db = aqt.LoadDatabase(Folder=r"D:\Shared", Name="AquatorExcel.mdb")
>>> db.GetProjectList()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Pythonxy\Pythonxy 2.7\Python27\lib\site-packages\win32c
om\gen_py\AE9A7F2A-5DD7-4658-B55C-216CAD680889x0x4x3\_Database.py", line 70, in
GetProjectList
    , NameList)
  File "C:\Program Files\Pythonxy\Pythonxy 2.7\Python27\lib\site-packages\win32c
om\client\__init__.py", line 456, in _ApplyTypes_
    self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)

一般来说,我对 COM 还很陌生,所以我真的不知道从哪里开始。是什么导致了这个错误,我该如何避免它?

4

0 回答 0