Python 使用win32com.client.gencache.cn修补程序时出现类型不匹配错误

Python 使用win32com.client.gencache.cn修补程序时出现类型不匹配错误,python,com,Python,Com,我正在尝试使用Win32 COM模块与专有应用程序的COM接口交互。我可以使用动态代理(win32com.client.Dispatch)连接到接口,该代理似乎可以工作。但是,如果我可以使用静态代理,这将非常有用,尤其是因为它填充了help()页面 我可以与动态代理正常交互: >>> import win32com.client >>> aqt = win32com.client.Dispatch("Aquator.Application") >>

我正在尝试使用Win32 COM模块与专有应用程序的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',))
但是,当我使用使用EnsureRedispatch或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)
>>导入win32com.client
>>>aqt=win32com.client.gencache.EnsureDispatch(“Aquator.Application”)
>>>数据库名称
u'D:\\Shared\\AquatorExcel.mdb'
>>>db=aqt.LoadDatabase(Folder=r“D:\Shared”,Name=“AquatorExcel.mdb”)
>>>db.GetProjectList()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\ProgramFiles\Pythonxy\Pythonxy 2.7\Python27\lib\site packages\win32c
om\gen_py\AE9A7F2A-5DD7-4658-B55C-216CAD680889x0x4x3\\ u Database.py”,第70行,在
获取项目列表
,姓名列表)
文件“C:\ProgramFiles\Pythonxy\Pythonxy 2.7\Python27\lib\site packages\win32c
om\client\\ uuuuu init\ uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu_
self._oleobj_uuj.InvokeTypes(dispid,0,wFlags,retType,argTypes,*args),
pywintypes.com_错误:(-2147352571,“类型不匹配”,无,1)

总的来说,我对COM还比较陌生,所以我真的不知道从这里该去哪里。导致此错误的原因以及如何避免此错误?

GetProjectList
需要两个参数,第一个参数是
long
的动态数组,第二个参数是
string
的动态数组。“我不知道这是如何翻译成COM的。@StevenRumbalski在VBA中,GetProjectList使用两个参数来返回结果。然而,Python只是像普通函数一样返回它们。如果我传递两个空列表,它似乎工作正常,即
db.GetProjectList([],[])
。我不明白为什么动态/静态代理之间存在差异。我也不明白。我只是碰巧读了一些我能在网上找到的例子。由于它接受空的Python列表来返回结果,因此在传递这些列表之前,应该命名这些列表。这样,您就可以访问它们<代码>a,b=[],[];db.GetProjectList(a,b)。