Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Python-COMMETHOD,未获得返回值_C#_Python_Com_Safearray - Fatal编程技术网

C# Python-COMMETHOD,未获得返回值

C# Python-COMMETHOD,未获得返回值,c#,python,com,safearray,C#,Python,Com,Safearray,我对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

我对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' )),
print apxWrapper.test()
其中,相同的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)的值作为返回值,而不是实际的返回值(必须是true/false)

我的函数调用如下

COMMETHOD([dispid(1610743820)], HRESULT, 'test',
          ( ['in', 'out'], POINTER(_midlSAFEARRAY(c_double)), 'test' ),
          ( ['retval', 'out'], POINTER(VARIANT_BOOL), 'pRetVal' )),
print apxWrapper.test()
输出为((0.0,0.5),)

注意:由于我无法找到从Python传递最后一个参数的方法,因此出于试用目的,我省略了最后一个参数

任何关于为什么会发生这种情况的暗示都是非常值得赞赏的,或者说得更具体一些,我有两个问题

  • 如何从Python(指针(_midlSAFEARRAY(c_double))传递要通过引用传递的参数
  • 如何获取实际返回值(真/假)

  • Sanjay

    “使用C#编写的COM dll”-真的吗?好的…dll在COM上公开