diff options
Diffstat (limited to 'ext/com/conversion.c')
-rw-r--r-- | ext/com/conversion.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 0adcefdf47..130885edd9 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -58,6 +58,8 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T type = VT_VARIANT|VT_BYREF; } else if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { type = VT_DISPATCH; + } else { + type = VT_DISPATCH; } break; @@ -155,6 +157,12 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, } } else { switch (V_VT(var_arg)) { + + case VT_NULL: + case VT_VOID: + ZVAL_NULL(pval_arg); + break; + case VT_UI1: convert_to_long_ex(&pval_arg); V_UI1(var_arg) = (unsigned char) Z_LVAL_P(pval_arg); @@ -211,6 +219,7 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, /** @todo case IS_STRING: + */ /* string representation of a time value */ default: @@ -262,7 +271,13 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, break; case VT_DISPATCH: - comval_to_variant(pval_arg, var_arg TSRMLS_CC); + if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { + comval_to_variant(pval_arg, var_arg TSRMLS_CC); + } else { + V_DISPATCH(var_arg) = php_COM_export_object(pval_arg TSRMLS_CC); + if (V_DISPATCH(var_arg)) + V_VT(var_arg) = VT_DISPATCH; + } if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } @@ -437,7 +452,7 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type, break; default: - php_error(E_WARNING, "Type not supported or not yet implemented."); + php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", V_VT(var_arg), V_VT(var_arg)); } } } |