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