Построение байтового массива в PHP с вариантами?

Я пытаюсь построить массив байтов в 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

Любая помощь очень ценится!

Ответ 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 из него i.e)

$v = new VARIANT($post);

Распечатывается 8024. 8024 - 8192 = 12. 12 = VT_VARIANT

Или я что-то пропустил?

Если вы хотите использовать VT_UI1, вам придется создавать варианты отдельно i.e

$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)
   */