我正在尝试使用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
中的变体类型的各种组合非常感谢任何帮助!
答案 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) */