我对 COM 编程很陌生,我们的项目需要 Python 脚本与用 C# 编写的 COM dll 进行通信。
Python中生成的COM签名如下
COMMETHOD([dispid(1610743820)], HRESULT, 'test',
( ['in', 'out'], POINTER(_midlSAFEARRAY(c_double)), 'test' ),
( ['retval', 'out'], POINTER(VARIANT_BOOL), 'pRetVal' )),
相同的 C# 代码在哪里
public bool test(ref double[,] test)
{
if (test == null)
test = new double[1,2];
test[0,0] = 0.0;
test[0,1] = 0.5;
return true;
}
注意:以上是我为解释问题而创建的虚拟函数
现在,当我尝试从 Python 调用 COM 方法时,我只获取通过引用方法 (sweepValuesX) 作为返回值而不是实际返回值(必须为真/假)传递的值
我的函数调用如下
print apxWrapper.test()
输出为 ((0.0, 0.5),)
注意:由于我无法找到从 Python 传递最后一个参数的方法,我只是省略了最后一个参数以供试用
高度赞赏为什么会发生这种情况的任何提示,或者具体来说我有两个问题
- 我如何通过 Python (POINTER(_midlSAFEARRAY(c_double))) 传递要通过引用传递的参数
- 我怎样才能得到实际的返回值(真/假)
桑杰