[PATCH resend 10/13] msscript.ocx: Implement ScriptModuleCollection_get_Item.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Tue May 26 07:42:04 CDT 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/msscript.ocx/msscript.c | 41 ++++++++++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index 0745e09..e3b7b86 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -704,6 +704,23 @@ static void release_modules(ScriptControl *control)
heap_free(control->modules);
}
+static UINT find_module(ScriptControl *control, BSTR name)
+{
+ UINT i, len = SysStringLen(name);
+
+ if (len == sizeof("Global") - 1 && !wcsicmp(name, L"Global"))
+ return 0;
+
+ for (i = 1; i < control->num_modules; i++)
+ {
+ BSTR modname = control->modules[i]->name;
+ if (SysStringLen(modname) == len && !wcsicmp(name, modname))
+ return i;
+ }
+
+ return ~0;
+}
+
static HRESULT WINAPI ScriptModule_QueryInterface(IScriptModule *iface, REFIID riid, void **ppv)
{
ScriptModule *This = impl_from_IScriptModule(iface);
@@ -1037,10 +1054,30 @@ static HRESULT WINAPI ScriptModuleCollection_get_Item(IScriptModuleCollection *i
IScriptModule **ppmod)
{
ScriptControl *This = impl_from_IScriptModuleCollection(iface);
+ HRESULT hr;
+ UINT i;
- FIXME("(%p)->(%s %p)\n", This, wine_dbgstr_variant(&index), ppmod);
+ TRACE("(%p)->(%s %p)\n", This, wine_dbgstr_variant(&index), ppmod);
- return E_NOTIMPL;
+ if (!ppmod) return E_POINTER;
+
+ if (V_VT(&index) == VT_BSTR)
+ {
+ i = find_module(This, V_BSTR(&index));
+ if (i == ~0) return CTL_E_ILLEGALFUNCTIONCALL;
+ }
+ else
+ {
+ hr = VariantChangeType(&index, &index, 0, VT_INT);
+ if (FAILED(hr)) return hr;
+
+ i = V_INT(&index) - 1;
+ if (i >= This->num_modules) return 0x800a0009;
+ }
+
+ *ppmod = &This->modules[i]->IScriptModule_iface;
+ IScriptModule_AddRef(*ppmod);
+ return S_OK;
}
static HRESULT WINAPI ScriptModuleCollection_get_Count(IScriptModuleCollection *iface, LONG *plCount)
--
2.21.0
More information about the wine-devel
mailing list