[PATCH 3/5] scrobj: Added IGenScriptletTLib stub

Nikolay Sivov nsivov at codeweavers.com
Thu Jan 26 15:36:10 CST 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/scrobj/Makefile.in |   1 +
 dlls/scrobj/scrobj.c    | 335 ++++++++++++++++++++++++++++++++++++++++++++++++
 dlls/scrobj/scrobj.idl  |   1 +
 3 files changed, 337 insertions(+)

diff --git a/dlls/scrobj/Makefile.in b/dlls/scrobj/Makefile.in
index fae99d1425..3d5962ca27 100644
--- a/dlls/scrobj/Makefile.in
+++ b/dlls/scrobj/Makefile.in
@@ -1,4 +1,5 @@
 MODULE    = scrobj.dll
+IMPORTS   = uuid
 
 C_SRCS = \
 	scrobj.c
diff --git a/dlls/scrobj/scrobj.c b/dlls/scrobj/scrobj.c
index 98f7c88e24..d2f990802b 100644
--- a/dlls/scrobj/scrobj.c
+++ b/dlls/scrobj/scrobj.c
@@ -26,12 +26,266 @@
 #include "olectl.h"
 #include "rpcproxy.h"
 
+#include "initguid.h"
+#include "scrobj.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(scrobj);
 
 static HINSTANCE scrobj_instance;
 
+struct scriptlet_typelib
+{
+    IGenScriptletTLib IGenScriptletTLib_iface;
+    LONG ref;
+};
+
+static inline struct scriptlet_typelib *impl_from_IGenScriptletTLib(IGenScriptletTLib *iface)
+{
+    return CONTAINING_RECORD(iface, struct scriptlet_typelib, IGenScriptletTLib_iface);
+}
+
+static HRESULT WINAPI scriptlet_typelib_QueryInterface(IGenScriptletTLib *iface, REFIID riid, void **obj)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), obj);
+
+    if (IsEqualIID(riid, &IID_IGenScriptletTLib) ||
+            IsEqualIID(riid, &IID_IDispatch) ||
+            IsEqualIID(riid, &IID_IUnknown))
+    {
+        *obj = iface;
+        IGenScriptletTLib_AddRef(iface);
+        return S_OK;
+    }
+
+    *obj = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI scriptlet_typelib_AddRef(IGenScriptletTLib *iface)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
+    TRACE("(%p)->(%u)\n", This, ref);
+    return ref;
+}
+
+static ULONG WINAPI scriptlet_typelib_Release(IGenScriptletTLib *iface)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+    LONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p)->(%u)\n", This, ref);
+
+    if (!ref)
+        HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
+}
+
+static HRESULT WINAPI scriptlet_typelib_GetTypeInfoCount(IGenScriptletTLib *iface, UINT *count)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, count);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_GetTypeInfo(IGenScriptletTLib *iface, UINT index, LCID lcid,
+    ITypeInfo **tinfo)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %u, %x, %p): stub\n", This, index, lcid, tinfo);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_GetIDsOfNames(IGenScriptletTLib *iface, REFIID riid, LPOLESTR *names,
+    UINT cNames, LCID lcid, DISPID *dispid)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %s, %p, %u, %x, %p): stub\n", This, debugstr_guid(riid), names, cNames, lcid, dispid);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_Invoke(IGenScriptletTLib *iface, DISPID dispid, REFIID riid,
+    LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *result, EXCEPINFO *ei, UINT *argerr)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %d, %s, %x, %x, %p, %p, %p, %p): stub\n", This, dispid, debugstr_guid(riid), lcid, flags,
+        params, result, ei, argerr);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_AddURL(IGenScriptletTLib *iface, BSTR url)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %s): stub\n", This, debugstr_w(url));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_put_Path(IGenScriptletTLib *iface, BSTR path)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %s): stub\n", This, debugstr_w(path));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_get_Path(IGenScriptletTLib *iface, BSTR *path)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, path);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_put_Doc(IGenScriptletTLib *iface, BSTR doc)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %s): stub\n", This, debugstr_w(doc));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_get_Doc(IGenScriptletTLib *iface, BSTR *doc)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, doc);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_put_Name(IGenScriptletTLib *iface, BSTR name)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %s): stub\n", This, debugstr_w(name));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_get_Name(IGenScriptletTLib *iface, BSTR *name)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, name);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_put_MajorVersion(IGenScriptletTLib *iface, WORD version)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %x): stub\n", This, version);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_get_MajorVersion(IGenScriptletTLib *iface, WORD *version)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, version);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_put_MinorVersion(IGenScriptletTLib *iface, WORD version)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %x): stub\n", This, version);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_get_MinorVersion(IGenScriptletTLib *iface, WORD *version)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, version);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_Write(IGenScriptletTLib *iface)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p): stub\n", This);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_Reset(IGenScriptletTLib *iface)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p): stub\n", This);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_put_GUID(IGenScriptletTLib *iface, BSTR guid)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %s): stub\n", This, debugstr_w(guid));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI scriptlet_typelib_get_GUID(IGenScriptletTLib *iface, BSTR *guid)
+{
+    struct scriptlet_typelib *This = impl_from_IGenScriptletTLib(iface);
+
+    FIXME("(%p, %p): stub\n", This, guid);
+
+    return E_NOTIMPL;
+}
+
+static const IGenScriptletTLibVtbl scriptlet_typelib_vtbl =
+{
+    scriptlet_typelib_QueryInterface,
+    scriptlet_typelib_AddRef,
+    scriptlet_typelib_Release,
+    scriptlet_typelib_GetTypeInfoCount,
+    scriptlet_typelib_GetTypeInfo,
+    scriptlet_typelib_GetIDsOfNames,
+    scriptlet_typelib_Invoke,
+    scriptlet_typelib_AddURL,
+    scriptlet_typelib_put_Path,
+    scriptlet_typelib_get_Path,
+    scriptlet_typelib_put_Doc,
+    scriptlet_typelib_get_Doc,
+    scriptlet_typelib_put_Name,
+    scriptlet_typelib_get_Name,
+    scriptlet_typelib_put_MajorVersion,
+    scriptlet_typelib_get_MajorVersion,
+    scriptlet_typelib_put_MinorVersion,
+    scriptlet_typelib_get_MinorVersion,
+    scriptlet_typelib_Write,
+    scriptlet_typelib_Reset,
+    scriptlet_typelib_put_GUID,
+    scriptlet_typelib_get_GUID
+};
+
 BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved)
 {
     TRACE("%p, %u, %p\n", hinst, reason, reserved);
@@ -66,11 +320,92 @@ HRESULT WINAPI DllUnregisterServer(void)
     return __wine_unregister_resources(scrobj_instance);
 }
 
+HRESULT WINAPI scriptlet_typelib_CreateInstance(IClassFactory *factory, IUnknown *outer, REFIID riid, void **obj)
+{
+    struct scriptlet_typelib *This;
+    HRESULT hr;
+
+    TRACE("(%p, %p, %s, %p)\n", factory, outer, debugstr_guid(riid), obj);
+
+    *obj = NULL;
+
+    This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
+    if (!This)
+        return E_OUTOFMEMORY;
+
+    This->IGenScriptletTLib_iface.lpVtbl = &scriptlet_typelib_vtbl;
+    This->ref = 1;
+
+    hr = IGenScriptletTLib_QueryInterface(&This->IGenScriptletTLib_iface, riid, obj);
+    IGenScriptletTLib_Release(&This->IGenScriptletTLib_iface);
+    return hr;
+}
+
+static HRESULT WINAPI scrruncf_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
+{
+    *ppv = NULL;
+
+    if (IsEqualGUID(&IID_IUnknown, riid))
+    {
+        TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
+        *ppv = iface;
+    }
+    else if (IsEqualGUID(&IID_IClassFactory, riid))
+    {
+        TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
+        *ppv = iface;
+    }
+
+    if (*ppv)
+    {
+        IUnknown_AddRef((IUnknown *)*ppv);
+        return S_OK;
+    }
+
+    WARN("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI scrruncf_AddRef(IClassFactory *iface)
+{
+    TRACE("(%p)\n", iface);
+    return 2;
+}
+
+static ULONG WINAPI scrruncf_Release(IClassFactory *iface)
+{
+    TRACE("(%p)\n", iface);
+    return 1;
+}
+
+static HRESULT WINAPI scrruncf_LockServer(IClassFactory *iface, BOOL fLock)
+{
+    TRACE("(%p)->(%x)\n", iface, fLock);
+    return S_OK;
+}
+
+static const struct IClassFactoryVtbl scriptlet_typelib_factory_vtbl =
+{
+    scrruncf_QueryInterface,
+    scrruncf_AddRef,
+    scrruncf_Release,
+    scriptlet_typelib_CreateInstance,
+    scrruncf_LockServer
+};
+
+static IClassFactory scriptlet_typelib_factory = { &scriptlet_typelib_factory_vtbl };
+
 /***********************************************************************
  *      DllGetClassObject (scrobj.@)
  */
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
 {
+    if (IsEqualGUID(&CLSID_TypeLib, rclsid))
+    {
+        TRACE("(Scriptlet.TypeLib %s %p)\n", debugstr_guid(riid), ppv);
+        return IClassFactory_QueryInterface(&scriptlet_typelib_factory, riid, ppv);
+    }
+
     FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     return CLASS_E_CLASSNOTAVAILABLE;
 }
diff --git a/dlls/scrobj/scrobj.idl b/dlls/scrobj/scrobj.idl
index 33826c2f34..4e39d3f8a3 100644
--- a/dlls/scrobj/scrobj.idl
+++ b/dlls/scrobj/scrobj.idl
@@ -17,6 +17,7 @@
  */
 
 #pragma makedep regtypelib
+#pragma makedep header
 
 import "unknwn.idl";
 import "objidl.idl";
-- 
2.11.0




More information about the wine-patches mailing list