summaryrefslogtreecommitdiff
path: root/ext/com/variant.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/com/variant.h')
-rw-r--r--ext/com/variant.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/ext/com/variant.h b/ext/com/variant.h
index ce5b4e66ae..3fd11f32e4 100644
--- a/ext/com/variant.h
+++ b/ext/com/variant.h
@@ -3,15 +3,30 @@
#if PHP_WIN32
-#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \
+#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \
VariantInit(v);
-#define FREE_VARIANT(v) VariantClear(v); \
+#define FREE_VARIANT(v) VariantClear(v); \
efree(v);
#define IS_VARIANT php_VARIANT_get_le_variant()
+#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \
+ comval *obj; \
+ ALLOC_COM(obj); \
+ php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \
+ ZVAL_LONG((z), zend_list_insert(obj, IS_COM)); \
+ } else { \
+ php_variant_to_pval((v), (z), codepage TSRMLS_CC); \
+ FREE_VARIANT(v); \
+ }
+
+#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v));
+#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \
+ return;
+
+
#endif /* PHP_WIN32 */
#endif /* VARIANT_H */