@@ -256,31 +256,26 @@ static HRESULT STDMETHODCALLTYPE disp_invokeex(
256
256
257
257
/* TODO: if PHP raises an exception here, we should catch it
258
258
* and expose it as a COM exception */
259
-
259
+ zend_fcall_info_cache fcc ;
260
260
if (wFlags & DISPATCH_PROPERTYPUT ) {
261
261
zend_update_property (Z_OBJCE (disp -> object ), Z_OBJ (disp -> object ), Z_STRVAL_P (name ), Z_STRLEN_P (name ), & params [0 ]);
262
262
ret = S_OK ;
263
- } else if (wFlags & DISPATCH_METHOD && zend_is_callable_ex (name , Z_OBJ (disp -> object ), 0 , NULL , NULL , NULL )) {
263
+ } else if (wFlags & DISPATCH_METHOD && zend_is_callable_ex (name , Z_OBJ (disp -> object ), 0 , NULL , & fcc , NULL )) {
264
264
zend_try {
265
265
retval = & rv ;
266
- if (SUCCESS == call_user_function (NULL , & disp -> object , name ,
267
- retval , pdp -> cArgs , params )) {
268
- ret = S_OK ;
269
- trace ("function called ok\n" );
270
-
271
- /* Copy any modified values to callers copy of variant*/
272
- for (i = 0 ; i < pdp -> cArgs ; i ++ ) {
273
- php_com_dotnet_object * obj = CDNO_FETCH (& params [i ]);
274
- VARIANT * srcvar = & obj -> v ;
275
- VARIANT * dstvar = & pdp -> rgvarg [ pdp -> cArgs - 1 - i ];
276
- if ((V_VT (dstvar ) & VT_BYREF ) && obj -> modified ) {
277
- trace ("percolate modified value for arg %u VT=%08x\n" , i , V_VT (dstvar ));
278
- php_com_copy_variant (dstvar , srcvar );
279
- }
266
+ zend_call_known_fcc (& fcc , retval , pdp -> cArgs , params , NULL );
267
+ ret = S_OK ;
268
+ trace ("function called ok\n" );
269
+
270
+ /* Copy any modified values to callers copy of variant*/
271
+ for (i = 0 ; i < pdp -> cArgs ; i ++ ) {
272
+ php_com_dotnet_object * obj = CDNO_FETCH (& params [i ]);
273
+ VARIANT * srcvar = & obj -> v ;
274
+ VARIANT * dstvar = & pdp -> rgvarg [ pdp -> cArgs - 1 - i ];
275
+ if ((V_VT (dstvar ) & VT_BYREF ) && obj -> modified ) {
276
+ trace ("percolate modified value for arg %u VT=%08x\n" , i , V_VT (dstvar ));
277
+ php_com_copy_variant (dstvar , srcvar );
280
278
}
281
- } else {
282
- trace ("failed to call func\n" );
283
- ret = DISP_E_EXCEPTION ;
284
279
}
285
280
} zend_catch {
286
281
trace ("something blew up\n" );
0 commit comments