summaryrefslogtreecommitdiff
path: root/ext/rpc/com/conversion.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/rpc/com/conversion.c')
-rw-r--r--ext/rpc/com/conversion.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c
index 0adcefdf47..130885edd9 100644
--- a/ext/rpc/com/conversion.c
+++ b/ext/rpc/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));
}
}
}