如何将8209数组对象变量转换为VT_VARIANT

时间:2017-02-17 10:30:54

标签: php arrays com variant comobject

我正在调用一个COM对象方法,该方法在我的PHP代码中返回类型8209的数组变体对象。

$com_VArray = $com_Object->objectMethod; //Is a 8209 variant object

我希望最终将转换后的VT_VARIANT对象作为另一个COM对象方法的值传递,该方法要求其输入为VT_VARIANT [12]。

我通过发出以下内容将$ com_VArray转换为VT_VARIANT对象变体类型

$obj_VT_VARIANT = variant_cast($com_VArray, VT_VARIANT);

然后我得到以下错误

  

致命错误:未捕获的异常' com_exception'消息'变体类型转换失败:类型不匹配。'在C:\ xampp \ htdocs \ waterCompany \ reservoir.php:110堆栈跟踪#0 C:\ xampp \ htdocs \ waterCompany \ reservoir.php(110):variant_cast(对象(变体),12)#1 {main}抛出在第110行的C:\ xampp \ htdocs \ waterCompany \ reservoir.php中。

我已经在variant_cast上做了更多的阅读http://php.net/manual/en/function.variant-set-type.php,但我没有取得太大的进展。

我使用的是PHP 5.5.11。

1 个答案:

答案 0 :(得分:0)

8209是0x2011,表示VT_UI1元素的数组。

当您想要转换它时,您需要创建一个Variants数组并将旧类型的每个元素复制到其中。复制内容时,可以将每个VT_UI1元素转换为VT_VARIANT类型。

它不是也绝不允许投射数组。试着学习VARIANTs的基础