Module: wine Branch: master Commit: dd2fcd6afabdcedfab955cff78a08f8b610856a5 URL: https://source.winehq.org/git/wine.git/?a=commit;h=dd2fcd6afabdcedfab955cff7...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 25 19:23:06 2019 +0200
scrobj: Add GetDispID implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/scrobj/scrobj.c | 22 ++++++++++++++++++++-- dlls/scrobj/tests/scrobj.c | 8 -------- 2 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/dlls/scrobj/scrobj.c b/dlls/scrobj/scrobj.c index 350efd9340..b0a8dc7d55 100644 --- a/dlls/scrobj/scrobj.c +++ b/dlls/scrobj/scrobj.c @@ -1046,8 +1046,26 @@ static HRESULT WINAPI scriptlet_Invoke(IDispatchEx *iface, DISPID dispIdMember, static HRESULT WINAPI scriptlet_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) { struct scriptlet_instance *This = impl_from_IDispatchEx(iface); - FIXME("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); - return E_NOTIMPL; + unsigned i; + + TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); + + if (grfdex & ~(fdexNameCaseInsensitive|fdexNameCaseSensitive)) + FIXME("Unsupported grfdex %x\n", grfdex); + + for (i = 0; i < This->member_cnt; i++) + { + if (grfdex & fdexNameCaseInsensitive) + { + if (wcsicmp(This->members[i].name, bstrName)) continue; + } + else if (wcscmp(This->members[i].name, bstrName)) continue; + *pid = i + 1; + return S_OK; + } + + WARN("Unknown property %s\n", debugstr_w(bstrName)); + return DISP_E_UNKNOWNNAME; }
static HRESULT WINAPI scriptlet_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *pdp, diff --git a/dlls/scrobj/tests/scrobj.c b/dlls/scrobj/tests/scrobj.c index 340e08874c..d61815ef65 100644 --- a/dlls/scrobj/tests/scrobj.c +++ b/dlls/scrobj/tests/scrobj.c @@ -848,45 +848,37 @@ static void test_create_object(void)
str = SysAllocString(L"vbAddOne"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &vb_add_one_id); - todo_wine ok(hres == S_OK, "Could not get vkAddOne id: %08x\n", hres); SysFreeString(str);
str = SysAllocString(L"jsAddTwo"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &js_add_two_id); - todo_wine ok(hres == S_OK, "Could not get jsAddTwo id: %08x\n", hres); SysFreeString(str);
str = SysAllocString(L"wtTest"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &wt_test_id); - todo_wine ok(hres == S_OK, "Could not get wtTest id: %08x\n", hres); SysFreeString(str);
str = SysAllocString(L"gsProp"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &wt_gsprop_id); - todo_wine ok(hres == S_OK, "Could not get wtTest id: %08x\n", hres); SysFreeString(str);
str = SysAllocString(L"vbaddone"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id); - todo_wine ok(hres == DISP_E_UNKNOWNNAME, "invalid case returned: %08x\n", hres); SysFreeString(str);
str = SysAllocString(L"vbaddone"); hres = IDispatchEx_GetDispID(dispex, str, 0, &id); - todo_wine ok(hres == DISP_E_UNKNOWNNAME, "invalid case returned: %08x\n", hres); SysFreeString(str);
str = SysAllocString(L"vbaddone"); hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseInsensitive, &id); - todo_wine ok(hres == S_OK, "case insensitive returned: %08x\n", hres); - todo_wine ok(id == vb_add_one_id, "id = %u, expected %u\n", id, vb_add_one_id); SysFreeString(str);