From: Jacek Caban Subject: vbscript: Added a helper for getting default IDispatch value. Message-Id: <54F86CDE.7080506@codeweavers.com> Date: Thu, 05 Mar 2015 15:49:02 +0100 --- dlls/vbscript/interp.c | 10 +++------- dlls/vbscript/vbdisp.c | 11 +++++++---- dlls/vbscript/vbscript.h | 1 + 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c index 64f998d..bc34860 100644 --- a/dlls/vbscript/interp.c +++ b/dlls/vbscript/interp.c @@ -323,10 +323,9 @@ static HRESULT stack_pop_val(exec_ctx_t *ctx, variant_val_t *r) stack_pop_deref(ctx, r); if(V_VT(r->v) == VT_DISPATCH) { - DISPPARAMS dp = {0}; HRESULT hres; - hres = disp_call(ctx->script, V_DISPATCH(r->v), DISPID_VALUE, &dp, &r->store); + hres = get_disp_value(ctx->script, V_DISPATCH(r->v), &r->store); if(r->owned) IDispatch_Release(V_DISPATCH(r->v)); if(FAILED(hres)) @@ -354,12 +353,10 @@ static HRESULT stack_assume_val(exec_ctx_t *ctx, unsigned n) } if(V_VT(v) == VT_DISPATCH) { - DISPPARAMS dp = {0}; IDispatch *disp; disp = V_DISPATCH(v); - V_VT(v) = VT_EMPTY; - hres = disp_call(ctx->script, disp, DISPID_VALUE, &dp, v); + hres = get_disp_value(ctx->script, disp, v); IDispatch_Release(disp); if(FAILED(hres)) return hres; @@ -706,10 +703,9 @@ static HRESULT assign_value(exec_ctx_t *ctx, VARIANT *dst, VARIANT *src, WORD fl return hres; if(V_VT(dst) == VT_DISPATCH && !(flags & DISPATCH_PROPERTYPUTREF)) { - DISPPARAMS dp = {NULL}; VARIANT value; - hres = disp_call(ctx->script, V_DISPATCH(dst), DISPID_VALUE, &dp, &value); + hres = get_disp_value(ctx->script, V_DISPATCH(dst), &value); IDispatch_Release(V_DISPATCH(dst)); if(FAILED(hres)) return hres; diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c index eec0bf6..9c0c4c1 100644 --- a/dlls/vbscript/vbdisp.c +++ b/dlls/vbscript/vbdisp.c @@ -105,15 +105,12 @@ static HRESULT get_propput_arg(script_ctx_t *ctx, const DISPPARAMS *dp, WORD fla if(V_VT(v) == VT_DISPATCH) { if(!(flags & DISPATCH_PROPERTYPUTREF)) { - DISPPARAMS val_dp = {NULL}; - VARIANT value; HRESULT hres; - hres = disp_call(ctx, V_DISPATCH(v), DISPID_VALUE, &val_dp, &value); + hres = get_disp_value(ctx, V_DISPATCH(v), v); if(FAILED(hres)) return hres; - *v = value; *is_owned = TRUE; } }else if(!(flags & DISPATCH_PROPERTYPUT)) { @@ -1102,6 +1099,12 @@ HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, DISPPARAMS *dp, return hres; } +HRESULT get_disp_value(script_ctx_t *ctx, IDispatch *disp, VARIANT *v) +{ + DISPPARAMS dp = {NULL}; + return disp_call(ctx, disp, DISPID_VALUE, &dp, v); +} + HRESULT disp_propput(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, DISPPARAMS *dp) { IDispatchEx *dispex; diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h index cbb90ce..cd122d3 100644 --- a/dlls/vbscript/vbscript.h +++ b/dlls/vbscript/vbscript.h @@ -149,6 +149,7 @@ HRESULT disp_get_id(IDispatch*,BSTR,vbdisp_invoke_type_t,BOOL,DISPID*) DECLSPEC_ HRESULT vbdisp_get_id(vbdisp_t*,BSTR,vbdisp_invoke_type_t,BOOL,DISPID*) DECLSPEC_HIDDEN; HRESULT disp_call(script_ctx_t*,IDispatch*,DISPID,DISPPARAMS*,VARIANT*) DECLSPEC_HIDDEN; HRESULT disp_propput(script_ctx_t*,IDispatch*,DISPID,WORD,DISPPARAMS*) DECLSPEC_HIDDEN; +HRESULT get_disp_value(script_ctx_t*,IDispatch*,VARIANT*) DECLSPEC_HIDDEN; void collect_objects(script_ctx_t*) DECLSPEC_HIDDEN; HRESULT create_procedure_disp(script_ctx_t*,vbscode_t*,IDispatch**) DECLSPEC_HIDDEN; HRESULT create_script_disp(script_ctx_t*,ScriptDisp**) DECLSPEC_HIDDEN;