用PHP构建一个带有变体的字节数组?

时间:2010-09-10 17:00:10

标签: php .net com

我正在尝试使用Variants在PHP中构建一个字节数组。但是,我似乎无法使其发挥作用。这是一个示例代码:

$ie = new COM("InternetExplorer.Application");

$ie->Visible = true;
$ie->Height    = 500 ;
$ie->Width     = 700 ;

$post = array (ord('p'),ord('='),ord('1')) ;
$v = new VARIANT($post, VT_ARRAY|VT_UI1); 

$ie->Navigate2("http://host/web/echo_request.php",0,'',$v) ;

代码产生错误:

  

致命错误:未捕获的异常   'com_exception',消息'Variant   类型转换失败:输入mismatch.type转换失败:类型不匹配。

我已尝试使用http://fi2.php.net/manual/en/com.constants.php

中的变体类型的各种组合

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

(PHP 5.3.2)
它不只是VT_ARRAY吗? (或空类型)

$post = array (ord('p'),ord('='),ord('1'));
$v = new VARIANT($post, VT_ARRAY);
print variant_get_type($v);

(注意:将VT_ARRAY留在其中也是如此),

$v = new VARIANT($post);

打印出8024. 8024 - 8192 = 12. 12 = VT_VARIANT

或者我在这里遗漏了什么?

如果要使用VT_UI1,则必须单独创建变体,即

$v = new VARIANT(ord('p'), VT_UI1);

但我假设你想要第一种方式。

这是来自PHP源代码(PHP 5.3.3)(可能有帮助,我可能会离开)

  

/ *仅在未通过* /的类型的变量时才执行转换      if((ZEND_NUM_ARGS()> = 2)&&(vt!= V_VT(& obj-> v))){

   /* If already an array and VT_ARRAY is passed then:  
       - if only VT_ARRAY passed then do not perform a conversion  
       - if VT_ARRAY plus other type passed then perform conversion  
         but will probably fail (origional behavior)
   */