我有以下的C#类库:如何返回从AC#DLL数组到PHP
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);
除了它所有的作品PHP脚本输出的getintarray();
最后一行:variant Object
var_dump($x)
出现空白。
,如果我改变C#返回对象的数组来代替:
object(variant)#2 (0) {
}
我如何在通过传回的数组中的值:
[return: MarshalAs(UnmanagedType.SafeArray)]
public object[] getintarray()
{
return new object[] { 1, 7, 9 };
}
然后var_dump($x)
有出现C#的DLL?
有什么我需要做的C#或PHP或两者?
我还需要字符串数组,所以对此的任何帮助都会受到欢迎。
编辑:
如所建议的通过迈克尔,我尝试以下:
[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)
您试过'UnmanagedType.LPArray'吗?这是一个* c风格*数组... –
现在 - 做同样的事情 – Graham