0
我想調用一個COM方法,它需要一個字符串SafeArray作爲參考傳遞,然後用方法結果填充。這是VBA,它完美的作品代碼:在Python中創建字符串SAFEARRAY
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())
現在,我試圖從與Python 3.4做的一樣,使用win32com模塊。然而,我堅持嘗試創建第二個參數與正確的類型,根據combrowse.py應該是「指針SafeArray字符串」。
這是我第一次嘗試:
import win32com
RC = win32com.client.Dispatch("RAS41.HECRASController")
RC.Project_Open("c:\\myProj.prj")
numMessages = 0
messages = []
RC.Compute_CurrentPlan(numMessages, messages)
我也嘗試構建該變量作爲
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.