2017-02-17 47 views
0

Я вызываю метод COM-объекта, который возвращает объект варианта массива типа 8209 в моем PHP-коде.Как преобразовать вариант объекта массива 8209 в VT_VARIANT

$com_VArray = $com_Object->objectMethod; //Is a 8209 variant object 

Я хочу, в конце концов, чтобы передать преобразованный объект VT_VARIANT в качестве значения для другого метода COM-объекта, который требует входные данные, чтобы быть VT_VARIANT [12].

Я преобразования $ com_VArray к типу варианта объекта VT_VARIANT, выполнив следующую

$obj_VT_VARIANT = variant_cast($com_VArray, VT_VARIANT); 

Но тогда я получаю эту следующую ошибку

Fatal error: Uncaught exception 'com_exception' with message 'Variant type conversion failed: Type mismatch.' in C:\xampp\htdocs\waterCompany\reservoir.php:110 Stack trace #0 C:\xampp\htdocs\waterCompany\reservoir.php(110): variant_cast(Object(variant),12)#1{main} thrown in C:\xampp\htdocs\waterCompany\reservoir.php on line 110.

Я сделал еще некоторое чтение на variant_cast здесь http://php.net/manual/en/function.variant-set-type.php но я не добился значительных успехов.

Я использую PHP 5.5.11.

+1

Где [тег: vbscript] вписывается в это? – Lankymart

+1

Вы уже получили Variat, содержащий VT_UI1. Существует не Вариант типа VT_VARIANT, у вас может быть указатель на вариант (VT_BYREF) или вариантный массив. – xMRi

+0

xMRi, пожалуйста, уточните, почему вы так говорите. См. Https://msdn.microsoft.com/en-us/library/windows/desktop/ms221170(v=vs.85).aspx Объектный метод моего приложения требует VT_VARIANT. –

ответ

0

8209 - 0x2011, который сигнализирует массив элементов VT_UI1.

Если вы хотите его преобразовать, вам необходимо создать массив вариантов и скопировать в него каждый элемент старого типа. При копировании содержимого вы можете отнести каждый элемент VT_UI1 в тип VT_VARIANT.

Это не и никогда не разрешено создавать массивы. Просто попробуйте изучить основы VARIANTs