将SAFEARRAY值传递给COM客户端

问题描述 投票:0回答:1

我正在尝试通过win32com.client模块自动化工具,该工具期望输入采用以下格式,如果特定于MATLAB,则显示如下格式。

HRESULT StaticStokesParameters([in] SAFEARRAY(double) newVal)

我不知道SAFEARRAY类型代表什么。我试图在python中创建2D数组,但我不断收到以下错误,

pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)

我可以毫无问题地读出这些值,但是当我将相同的值赋给SET参数时,它就不能这样做,

EngineMgr = win32com.client.Dispatch("EngineMgr")
Engine = EngineMgr.OpenEngine(0)
d_array = Engine.StaticStokesParameters
print(d_array)
**(-1.0, 0.0, 0.0) # Output of Print Statement**
Engine.StaticStokesParameters = d_array
**Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
Engine.StaticStokesParameters = d_array
File "C:\Users\ashes\Anaconda3\lib\site-packages\win32com\client\dynamic.py", line 549, in __setattr__
self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value)
pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)**
python-3.x com win32com safearray
1个回答
0
投票

通过导入下面显示的模块来完成此工作,

from win32com.client import VARIANT
import pythoncom

sop= Engine.StaticStokesParameters
Engine.StaticStokesParameters = VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8,sop)
© www.soinside.com 2019 - 2024. All rights reserved.