--- com_wrapper.c.old 2007-01-25 10:40:38.265625000 +0000
+++ com_wrapper.c 2007-01-25 12:57:15.890625000 +0000
@@ -298,6 +298,20 @@
&retval, pdp->cArgs, params, 1, NULL TSRMLS_CC)) {
ret = S_OK;
trace("function called ok\n");
+
+ /* Copy any modifed values to callers copy of variant*/
+ for (i = 0; i < pdp->cArgs; i++) {
+ php_com_dotnet_object *obj = CDNO_FETCH(*params[i]);
+ VARIANT *srcvar = &obj->v;
+ VARIANT *dstvar = &pdp->rgvarg[ pdp->cArgs - 1 - i];
+ //todo: Unfortunatley some IN only parameters are passed by ref which so
+ // this does mean that a user method can incorrectly modify a IN only
+ // variant. Is this an issue ?
+ if ((V_VT(dstvar) & VT_BYREF) && obj->modified ) {
+ trace("percolate modified value for arg %d VT=%08x\n", i, V_VT(dstvar));
+ php_com_copy_variant(dstvar, srcvar TSRMLS_CC);
+ }
+ }
} else {
trace("failed to call func\n");
ret = DISP_E_EXCEPTION;