2

我有一个 .net C# 函数,它将双精度数组作为第一个参数,并基于第一个参数传回另一个双精度数组。

C# 代码

public int testMath(double[] InputSet, double[] OutputSet)
{
    // more complicated than what I am showing but
   for (int i = 0; i < 3; i++)
   {
      OutputSet[i] = InputSet[i] * 2.0;
   }
   return 1;  // Really something else
}

PHP

$mathTest = new DOTNET("MathTest,"
        ."Version=1.0.0.0,"
        ."Culture=neutral,"
        ."PublicKeyToken=213536b1e6bb8ea5"
        , "MathTest.MathTest");

$inputValue = Array();
$outputValue = Array();

for ($i = 0; $i < 3; $i++){
  $inputValue[$i] = $i * 3.0;
  $outputValue[$i] = 0.0;
}

$status = $mathTest->testMath($inputValue, $outputValue);

当我尝试运行它时,我收到一个错误,即参数 1 是类型不匹配。
我还有其他例程将双精度数作为输入并通过 ref 输出按我的预期工作。我可以从其他编程语言调用这个例程,但我不知道如何让它在 PHP 中工作。我尝试使用 com_print_typeinfo 查看参数,发现两个参数都显示为 VT_SAFEARRAY 作为 IN。我做了一些测试以将参数 1 更改为 OUT 并且它使情况变得更糟(根本不会运行)。任何建议将不胜感激。

4

1 回答 1

1

最简单的方法 imo 是将双数组编码为 json。

来自 php

json_encode ($myarr);

或者

  json_decode ($myarr); // if u want the other direction

然后在 c# 中捕获它(反之亦然)并解码它。你可以使用 json.net 或 jsonFx 等。

于 2013-05-24T14:00:19.430 回答