Jacek Caban : vbscript: Added a helper for getting default IDispatch value.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 5 09:53:25 CST 2015


Module: wine
Branch: master
Commit: 0de7b95c371c911c0dd86d6fad89160bdab474ab
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0de7b95c371c911c0dd86d6fad89160bdab474ab

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Mar  5 15:49:02 2015 +0100

vbscript: Added a helper for getting default IDispatch value.

---

 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;




More information about the wine-cvs mailing list