0

我对 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 传递最后一个参数的方法,我只是省略了最后一个参数以供试用

高度赞赏为什么会发生这种情况的任何提示,或者具体来说我有两个问题

  1. 我如何通过 Python (POINTER(_midlSAFEARRAY(c_double))) 传递要通过引用传递的参数
  2. 我怎样才能得到实际的返回值(真/假)

桑杰

4

0 回答 0