[PATCH 10/12] vbscript: Implement ScriptTypeLib_FindName.

Gabriel Ivăncescu gabrielopcode at gmail.com
Mon Jan 27 09:33:05 CST 2020


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---

This function, and IsName, change the input name parameter's case to match
that of the one found.

 dlls/vbscript/vbdisp.c | 50 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 48 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c
index ef40ee9..bae5f42 100644
--- a/dlls/vbscript/vbdisp.c
+++ b/dlls/vbscript/vbdisp.c
@@ -1381,11 +1381,57 @@ static HRESULT WINAPI ScriptTypeLib_FindName(ITypeLib *iface, LPOLESTR szNameBuf
         ITypeInfo **ppTInfo, MEMBERID *rgMemId, USHORT *pcFound)
 {
     ScriptTypeInfo *This = ScriptTypeInfo_from_typelib_ITypeLib(iface);
+    UINT cnt, i;
 
-    FIXME("(%p)->(%s %08x %p %p %p)\n", This, debugstr_w(szNameBuf), lHashVal,
+    TRACE("(%p)->(%s %08x %p %p %p)\n", This, debugstr_w(szNameBuf), lHashVal,
           ppTInfo, rgMemId, pcFound);
 
-    return E_NOTIMPL;
+    if (!szNameBuf || !ppTInfo || !rgMemId || !pcFound)
+        return E_INVALIDARG;
+
+    cnt = *pcFound;
+    *pcFound = 0;
+    if (!cnt) return S_OK;
+
+    if (!wcsicmp(szNameBuf, L"VBScriptTypeInfo"))
+    {
+        /* Make sure to capitalize the name as it is found */
+        lstrcpyW(szNameBuf, L"VBScriptTypeInfo");
+        *rgMemId++ = MEMBERID_NIL;
+        *ppTInfo++ = &This->ITypeInfo_iface;
+        ITypeInfo_AddRef(&This->ITypeInfo_iface);
+        (*pcFound)++;
+        if (cnt == 1)
+            return S_OK;
+    }
+
+    for (i = 0; i < This->num_funcs; i++)
+    {
+        if (!wcsicmp(szNameBuf, This->funcs[i].func->name))
+        {
+            lstrcpyW(szNameBuf, This->funcs[i].func->name);
+            *rgMemId++ = This->funcs[i].memid;
+            *ppTInfo++ = &This->ITypeInfo_iface;
+            ITypeInfo_AddRef(&This->ITypeInfo_iface);
+            (*pcFound)++;
+            return S_OK;
+        }
+    }
+
+    for (i = 0; i < This->num_vars; i++)
+    {
+        if (!wcsicmp(szNameBuf, This->disp->global_vars[i]->name))
+        {
+            lstrcpyW(szNameBuf, This->disp->global_vars[i]->name);
+            *rgMemId++ = i + 1;
+            *ppTInfo++ = &This->ITypeInfo_iface;
+            ITypeInfo_AddRef(&This->ITypeInfo_iface);
+            (*pcFound)++;
+            return S_OK;
+        }
+    }
+
+    return S_OK;
 }
 
 static void WINAPI ScriptTypeLib_ReleaseTLibAttr(ITypeLib *iface, TLIBATTR *pTLibAttr)
-- 
2.21.0




More information about the wine-devel mailing list