如何 return 数组从 c# dll 到 php
How to return an array from a c# dll to php
我有以下 c# class 库:
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_dump($x)
出现空白。
如果我将 C# 改为 return 对象数组:
[return: MarshalAs(UnmanagedType.SafeArray)]
public object[] getintarray()
{
return new object[] { 1, 7, 9 };
}
然后var_dump($x)
得出:
object(variant)#2 (0) {
}
如何获取由 c# dll 传回的数组中的值?
我需要对 c# 或 php 或两者做些什么吗?
我还需要字符串数组,因此也欢迎提供任何帮助。
编辑:
按照 Michael 的建议,我尝试了以下方法:
[return: MarshalAs(UnmanagedType.LPArray)]
public int[] getintarray()
...
它与我 return 创建对象数组时具有相同的 return。
另外 count($x)
给出了 returned 数组中的元素数量(在本例中为 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/>";
}
能否将数组保存在临时文本文档中,然后再读回?
我想我会这样做。
MfG BTM3000
我有以下 c# class 库:
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_dump($x)
出现空白。
如果我将 C# 改为 return 对象数组:
[return: MarshalAs(UnmanagedType.SafeArray)]
public object[] getintarray()
{
return new object[] { 1, 7, 9 };
}
然后var_dump($x)
得出:
object(variant)#2 (0) {
}
如何获取由 c# dll 传回的数组中的值?
我需要对 c# 或 php 或两者做些什么吗?
我还需要字符串数组,因此也欢迎提供任何帮助。
编辑:
按照 Michael 的建议,我尝试了以下方法:
[return: MarshalAs(UnmanagedType.LPArray)]
public int[] getintarray()
...
它与我 return 创建对象数组时具有相同的 return。
另外 count($x)
给出了 returned 数组中的元素数量(在本例中为 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/>";
}
能否将数组保存在临时文本文档中,然后再读回?
我想我会这样做。
MfG BTM3000