Jacek Caban : scrobj: Add GetDispID implementation.
Alexandre Julliard
julliard at winehq.org
Wed Sep 25 16:45:19 CDT 2019
Module: wine
Branch: master
Commit: dd2fcd6afabdcedfab955cff78a08f8b610856a5
URL: https://source.winehq.org/git/wine.git/?a=commit;h=dd2fcd6afabdcedfab955cff78a08f8b610856a5
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 25 19:23:06 2019 +0200
scrobj: Add GetDispID implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);
More information about the wine-cvs
mailing list