How to convert 8209 array object variant to VT_VARIANT

╄→гoц情女王★ 提交于 2019-12-18 07:22:48

问题


I am calling a COM object method that returns an array variant object of type 8209 in my PHP code.

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

I want in the end to pass the converted VT_VARIANT object as a value for another COM object method which requires its input to be VT_VARIANT[12].

I am converting $com_VArray to a VT_VARIANT object variant type by issuing the following

$obj_VT_VARIANT = variant_cast($com_VArray, VT_VARIANT);

But then I get this following error

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.

I have done some more reading on variant_cast here http://php.net/manual/en/function.variant-set-type.php but I have not made much significant headways.

I am using PHP 5.5.11.


回答1:


8209 is 0x2011 that signals an array of VT_UI1 elements.

When you want to convert it, you need to create an array of Variants and copy each element of the old type into it. When you copy the contents you can cast each VT_UI1 element into an VT_VARIANT type.

It is not and never allowed to cast arrays. Just try to learn the basisc of VARIANTs



来源:https://stackoverflow.com/questions/42295574/how-to-convert-8209-array-object-variant-to-vt-variant

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!