Gabriel Ivăncescu : msscript.ocx: Implement ScriptProcedure::get_HasReturnValue.

Alexandre Julliard julliard at winehq.org
Thu Aug 13 15:11:51 CDT 2020


Module: wine
Branch: master
Commit: 3273add6550cbdcb8f3d4fdf224d9c82e9446e57
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3273add6550cbdcb8f3d4fdf224d9c82e9446e57

Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date:   Wed Aug 12 17:13:44 2020 +0300

msscript.ocx: Implement ScriptProcedure::get_HasReturnValue.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msscript.ocx/msscript.c       |  9 +++++++--
 dlls/msscript.ocx/tests/msscript.c | 13 +++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index a510db7022..a339e70e2b 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -98,6 +98,7 @@ typedef struct {
 
     BSTR name;
     USHORT num_args;
+    VARTYPE ret_type;
 } ScriptProcedure;
 
 struct ScriptProcedureCollection {
@@ -901,9 +902,12 @@ static HRESULT WINAPI ScriptProcedure_get_HasReturnValue(IScriptProcedure *iface
 {
     ScriptProcedure *This = impl_from_IScriptProcedure(iface);
 
-    FIXME("(%p)->(%p)\n", This, pfHasReturnValue);
+    TRACE("(%p)->(%p)\n", This, pfHasReturnValue);
 
-    return E_NOTIMPL;
+    if (!pfHasReturnValue) return E_POINTER;
+
+    *pfHasReturnValue = (This->ret_type == VT_VOID) ? VARIANT_FALSE : VARIANT_TRUE;
+    return S_OK;
 }
 
 static const IScriptProcedureVtbl ScriptProcedureVtbl = {
@@ -962,6 +966,7 @@ static HRESULT get_script_procedure(ScriptProcedureCollection *procedures, IType
     proc->hash = hash;
     proc->name = str;
     proc->num_args = desc->cParams + desc->cParamsOpt;
+    proc->ret_type = desc->elemdescFunc.tdesc.vt;
     list_add_tail(proc_list, &proc->entry);
 
     *procedure = &proc->IScriptProcedure_iface;
diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c
index ad7e48fcdb..7233af5ee8 100644
--- a/dlls/msscript.ocx/tests/msscript.c
+++ b/dlls/msscript.ocx/tests/msscript.c
@@ -3295,6 +3295,7 @@ static void test_IScriptControl_get_Procedures(void)
     IScriptProcedureCollection *procs, *procs2;
     IScriptProcedure *proc, *proc2;
     IScriptControl *sc;
+    VARIANT_BOOL vbool;
     VARIANT var;
     LONG count;
     HRESULT hr;
@@ -3363,6 +3364,11 @@ static void test_IScriptControl_get_Procedures(void)
     hr = IScriptProcedure_get_NumArgs(proc, &count);
     ok(hr == S_OK, "IScriptProcedure_get_NumArgs failed: 0x%08x.\n", hr);
     ok(count == 2, "Wrong NumArgs, got %d.\n", count);
+    hr = IScriptProcedure_get_HasReturnValue(proc, NULL);
+    ok(hr == E_POINTER, "IScriptProcedure_get_HasReturnValue returned: 0x%08x.\n", hr);
+    hr = IScriptProcedure_get_HasReturnValue(proc, &vbool);
+    ok(hr == S_OK, "IScriptProcedure_get_HasReturnValue failed: 0x%08x.\n", hr);
+    ok(vbool == VARIANT_TRUE, "HasReturnValue did not return True, got %x.\n", vbool);
     IScriptProcedure_Release(proc);
 
     V_VT(&var) = VT_BSTR;
@@ -3378,6 +3384,9 @@ static void test_IScriptControl_get_Procedures(void)
     hr = IScriptProcedure_get_NumArgs(proc, &count);
     ok(hr == S_OK, "IScriptProcedure_get_NumArgs failed: 0x%08x.\n", hr);
     ok(count == 1, "Wrong NumArgs, got %d.\n", count);
+    hr = IScriptProcedure_get_HasReturnValue(proc, &vbool);
+    ok(hr == S_OK, "IScriptProcedure_get_HasReturnValue failed: 0x%08x.\n", hr);
+    ok(vbool == VARIANT_TRUE, "HasReturnValue did not return True, got %x.\n", vbool);
     IScriptProcedure_Release(proc);
 
     V_VT(&var) = VT_R8;
@@ -3584,6 +3593,10 @@ static void test_IScriptControl_get_Procedures(void)
             ok(hr == S_OK, "get_NumArgs for %s failed: 0x%08x.\n", wine_dbgstr_w(custom_engine_funcs[i].name), hr);
             ok(count == custom_engine_funcs[i].num_args + custom_engine_funcs[i].num_opt_args,
                 "NumArgs is not %d, got %d.\n", custom_engine_funcs[i].num_args + custom_engine_funcs[i].num_opt_args, count);
+            hr = IScriptProcedure_get_HasReturnValue(proc, &vbool);
+            ok(hr == S_OK, "get_HasReturnValue for %s failed: 0x%08x.\n", wine_dbgstr_w(custom_engine_funcs[i].name), hr);
+            ok(vbool == ((custom_engine_funcs[i].ret_type == VT_VOID) ? VARIANT_FALSE : VARIANT_TRUE),
+                "get_HasReturnValue for %s returned %x.\n", wine_dbgstr_w(custom_engine_funcs[i].name), vbool);
 
             IScriptProcedure_Release(proc);
         }




More information about the wine-cvs mailing list