我试图调用一个COM方法,它需要一个字符串的SafeArray作为引用传递,然后用方法结果填充它。这是VBA中的代码,它可以完美地工作:
dimr RC as New RAS41.HECRASController
RC.Project_Open "c:\myProj.prj"
dim numMessages as Long
dim messages() as String
RC.Compute_CurrentPlan( numMessages, messages())
现在,我尝试在python3.4中使用win32com模块来实现同样的效果。但是,我一直在尝试使用正确的类型创建第二个参数,根据combrowse.py公司应该是“指针安全数组字符串”。在
这是我第一次尝试:
^{pr2}$我也试着把这个变量构造成
messages = win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_BSTR, [])
但也没用。错误消息如下所示:
Traceback (most recent call last):
File "<pyshell#101>", line 1, in <module>
print(o.Compute_CurrentPlan(1,b))
File "<COMObject RAS41.HECRASController>", line 3, in Compute_CurrentPlan
File "C:\Python34\lib\site-packages\win32com\client\dynamic.py", line 282, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
TypeError: Objects for SAFEARRAYS must be sequences (of sequences), or a buffer object.
确保python变量的格式正确(Long和String)。尝试使用类似于下面的方法来获得形状变量类型:
为了使程序更灵活,您应该在win32调用之前检查变量类型。在
相关问题 更多 >
编程相关推荐