Jacek Caban : msscript.ocx: Added ScriptControl class factory.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jun 26 07:11:53 CDT 2015


Module: wine
Branch: master
Commit: cabbb922e6528759380dafec918c5d4ee9f55257
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cabbb922e6528759380dafec918c5d4ee9f55257

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jun 25 13:31:19 2015 +0200

msscript.ocx: Added ScriptControl class factory.

---

 dlls/msscript.ocx/msscript.c | 64 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index 30666a0..cf62ba4 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -16,9 +16,13 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#define COBJMACROS
+
 #include "windows.h"
+#include "initguid.h"
 #include "ole2.h"
 #include "rpcproxy.h"
+#include "msscript.h"
 
 #include "wine/debug.h"
 
@@ -26,6 +30,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(msscript);
 
 static HINSTANCE msscript_instance;
 
+HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
+{
+    FIXME("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
+    return E_NOINTERFACE;
+}
+
 /******************************************************************
  *              DllMain (msscript.ocx.@)
  */
@@ -45,11 +55,65 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID lpv)
     return TRUE;
 }
 
+static HRESULT WINAPI ClassFactory_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 ClassFactory_AddRef(IClassFactory *iface)
+{
+    TRACE("(%p)\n", iface);
+    return 2;
+}
+
+static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
+{
+    TRACE("(%p)\n", iface);
+    return 1;
+}
+
+static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
+{
+    TRACE("(%p)->(%x)\n", iface, fLock);
+    return S_OK;
+}
+
+static const IClassFactoryVtbl ScriptControlFactoryVtbl = {
+    ClassFactory_QueryInterface,
+    ClassFactory_AddRef,
+    ClassFactory_Release,
+    ScriptControl_CreateInstance,
+    ClassFactory_LockServer
+};
+
+static IClassFactory ScriptControlFactory = { &ScriptControlFactoryVtbl };
+
 /***********************************************************************
  *		DllGetClassObject	(msscript.ocx.@)
  */
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 {
+    if(IsEqualGUID(&CLSID_ScriptControl, rclsid)) {
+        TRACE("(CLSID_ScriptControl %s %p)\n", debugstr_guid(riid), ppv);
+        return IClassFactory_QueryInterface(&ScriptControlFactory, riid, ppv);
+    }
+
     FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     return CLASS_E_CLASSNOTAVAILABLE;
 }




More information about the wine-cvs mailing list