在Python中创建字符串的SAFEARRAY

2024-09-29 23:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图调用一个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.

Tags: 方法字符串inaslinewin32comfilemessages
1条回答
网友
1楼 · 发布于 2024-09-29 23:14:41

确保python变量的格式正确(Long和String)。尝试使用类似于下面的方法来获得形状变量类型:

messages = ['']
RC.Compute_CurrentPlan(long(numMessages), messages)

为了使程序更灵活,您应该在win32调用之前检查变量类型。在

相关问题 更多 >

    热门问题