All pastes #328026 Raw Edit

Miscellany

public text v1 · immutable
#328026 ·published 2007-01-25 13:33 UTC
rendered paste body
--- 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;