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