Module: wine Branch: master Commit: 4bb10ad385ccac1b427b463b7275579539eb14a7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4bb10ad385ccac1b427b463b72...
Author: Jacek Caban jacek@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; }