Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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#dll返回到php_C#_Php_.net_Com - Fatal编程技术网

如何将数组从c#dll返回到php

如何将数组从c#dll返回到php,c#,php,.net,com,C#,Php,.net,Com,我有以下c#类库: using System.Runtime.InteropServices; namespace phptest { public class Class1 { public int getint() { return 17; } public string getstring() { return "yup"; }

我有以下c#类库:

using System.Runtime.InteropServices;

namespace phptest
{
    public class Class1
    {
        public int getint()
        {
            return 17;
        }

        public string getstring()
        {
            return "yup";
        }

        public int doubleint(int x)
        {
            return x * 2;
        }

        public string doublestring(string s)
        {
            return s + s;
        }

        [return: MarshalAs(UnmanagedType.SafeArray)]
        public int[] getintarray()
        {
            return new int[] { 1, 7, 9 };
        }
    }
}
并使用以下php脚本对其进行测试:

$obj = new COM("phptest.Class1");
print $obj->getint();
print "\r\n" . $obj->getstring();
print "\r\n" . $obj->doublestring("dog") . "\r\n";
print $obj->doubleint(11);
$x = $obj->getintarray();
print_r($x);
除了
getintarray(),它都可以工作

php脚本的最后一行输出:
variant Object

var\u dump($x)
显示为空

如果我将c#改为返回一个对象数组:

[return: MarshalAs(UnmanagedType.SafeArray)]
public object[] getintarray()
{
    return new object[] { 1, 7, 9 };
}
然后,
var\u dump($x)
得出:

object(variant)#2 (0) {
}
如何获取c#dll传回的数组中的值

我需要对c#或php或两者都做些什么吗

我还需要字符串数组,所以在这方面的任何帮助都是非常受欢迎的

编辑:

根据Michael的建议,我尝试了以下方法:

[return: MarshalAs(UnmanagedType.LPArray)]
public int[] getintarray()
...
它的返回值与我让它返回对象数组时的返回值相同

另外,
count($x)
提供返回数组中的元素数(本例中为3个)

我已尝试通过以下方式访问元素:

$x[0]          outputs "variant Object"
$x->value      outputs nothing
$x[0]->value   outputs nothing
$x->0          outputs nothing

var_dump($x[0])提供了与var_dump($x)相同的功能。

这不是最好的方法,但请查看您是否能够在Php中使用此功能

foreach($x as $array){
    echo "Value ".$array. "<br/>";
}
foreach($x作为$array){
回显“值”。$array。“
”; }
您是否可以将数组保存在临时文本文档中,然后重新读取

我想我会这么做的


MfG BTM3000

您是否尝试过
非托管类型.LPArray
?这是一个c风格的数组…现在有-做同样的事情不起作用,结果是
0处的值是1处的值是2处的值是3处的值是
我不知道为什么其他方法不起作用,但是它起作用了,所以谢谢我读了更多关于这方面的内容,似乎PHP数组实际上不是数组,但它们是哈希表/链表。这就是为什么不容易做到的原因。有关详细信息,请参阅。简言之,大量的复制工作,我不想麻烦:-)是的,我也可以将整个结果作为字符串传递回去,并在php中解析它,但是如果我可以避免,我愿意。