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