【问题标题】:Building a byte array in PHP with variants?在 PHP 中使用变体构建字节数组?
【发布时间】:2011-04-10 20:09:50
【问题描述】:

我正在尝试使用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” 类型转换失败:类型不匹配。类型转换失败:类型不匹配。

我已经尝试了来自http://fi2.php.net/manual/en/com.constants.php的变体类型的各种组合

非常感谢任何帮助!

【问题讨论】:

    标签: php .net com


    【解决方案1】:

    (使用 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)
       */
    

    【讨论】:

    • 感谢您的回答。但是,我仍然无法正常工作。这会产生一个错误“参数不正确”,我认为它来自实际的 .NET 函数而不是 PHP。我试过的代码 sn-ps:$variant = new VARIANT(array());$variant = new VARIANT(array(new VARIANT(ord('p'), VT_UI1)));。有什么想法吗?
    • 代码 $variant = new VARIANT(array());会出错,因为数组是空的,如果你想要一个空的变体,你只需在没有 array() 的情况下这样做。 $variant = new VARIANT();哪个部分给你错误?
    • @Viper_Sb 你能帮我解决我在这里问的这个问题吗stackoverflow.com/questions/42189245/…我很高兴感谢你的帮助。
    猜你喜欢
    • 2018-12-20
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多