Я пытаюсь построить массив байтов в 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» с сообщением «Не удалось преобразовать тип варианта: Ошибка преобразования типа mismatch.type: введите несоответствие.
Я попытался использовать всевозможные комбинации для типа варианта из http://fi2.php.net/manual/en/com.constants.php
Любая помощь очень ценится!
(с 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) */