Jacek Caban : vbscript: Added GetDispID support for properties.

Alexandre Julliard julliard at winehq.org
Fri Sep 16 13:28:32 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Sep 16 13:27:31 2011 +0200

vbscript: Added GetDispID support for properties.

---

 dlls/vbscript/tests/lang.vbs |    2 ++
 dlls/vbscript/tests/run.c    |   18 +++++++++++++++++-
 dlls/vbscript/vbdisp.c       |   14 +++++++++++++-
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index e23cd86..3f9f73e 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -399,6 +399,8 @@ Class TestClass
         publicFunction = 4
     End Function
 
+    Public publicProp2
+
     Public Sub publicSub
     End Sub
 
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 6b2ec84..4fd46c9 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -160,7 +160,7 @@ static BOOL is_lang_english(void)
 
 static void test_disp(IDispatch *disp)
 {
-    DISPID id, public_func_id, public_sub_id;
+    DISPID id, public_prop_id, public_prop2_id, public_func_id, public_sub_id;
     DISPID named_args[5] = {DISPID_PROPERTYPUT};
     VARIANT v, args[5];
     DISPPARAMS dp = {args, named_args};
@@ -172,6 +172,22 @@ static void test_disp(IDispatch *disp)
     hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
     ok(hres == S_OK, "Could not get IDispatchEx iface: %08x\n", hres);
 
+    str = a2bstr("publicProp");
+    hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseInsensitive, &public_prop_id);
+    SysFreeString(str);
+    ok(hres == S_OK, "GetDispID(publicProp) failed: %08x\n", hres);
+
+    str = a2bstr("PUBLICPROP");
+    hres = IDispatchEx_GetDispID(dispex, str, 0, &id);
+    SysFreeString(str);
+    ok(hres == S_OK, "GetDispID(PUBLICPROP) failed: %08x\n", hres);
+    ok(public_prop_id == id, "id = %d\n", public_prop_id);
+
+    str = a2bstr("publicPROP2");
+    hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseInsensitive, &public_prop2_id);
+    SysFreeString(str);
+    ok(hres == S_OK, "GetDispID(publicProp2) failed: %08x\n", hres);
+
     str = a2bstr("publicFunction");
     hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseInsensitive, &public_func_id);
     SysFreeString(str);
diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c
index 666d04a..2d0540f 100644
--- a/dlls/vbscript/vbdisp.c
+++ b/dlls/vbscript/vbdisp.c
@@ -46,11 +46,23 @@ static BOOL get_func_id(vbdisp_t *This, const WCHAR *name, BOOL search_private,
     return FALSE;
 }
 
-static HRESULT vbdisp_get_id(vbdisp_t *This, BSTR name, BOOL search_private, DISPID *id)
+HRESULT vbdisp_get_id(vbdisp_t *This, BSTR name, BOOL search_private, DISPID *id)
 {
+    unsigned i;
+
     if(get_func_id(This, name, search_private, id))
         return S_OK;
 
+    for(i=0; i < This->desc->prop_cnt; i++) {
+        if(!search_private && !This->desc->props[i].is_public)
+            continue;
+
+        if(!strcmpiW(This->desc->props[i].name, name)) {
+            *id = i + This->desc->func_cnt;
+            return S_OK;
+        }
+    }
+
     *id = -1;
     return DISP_E_UNKNOWNNAME;
 }




More information about the wine-cvs mailing list