shdocvw: Move the private class factory declaration into factory.c.
[wine/testsucceed.git] / dlls / shdocvw / factory.c
blob264539a5d75827393542f2742b8113cd3afc7fdd
1 /*
2 * Implementation of class factory for IE Web Browser
4 * Copyright 2001 John R. Sheets (for CodeWeavers)
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <string.h>
22 #include "wine/debug.h"
23 #include "shdocvw.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
27 /**********************************************************************
28 * Implement the WebBrowser class factory
30 * (Based on implementation in ddraw/main.c)
33 typedef struct
35 /* IUnknown fields */
36 const IClassFactoryVtbl *lpVtbl;
37 HRESULT (*cf)(LPUNKNOWN, REFIID, LPVOID *);
38 LONG ref;
39 } IClassFactoryImpl;
42 /**********************************************************************
43 * WBCF_QueryInterface (IUnknown)
45 static HRESULT WINAPI WBCF_QueryInterface(LPCLASSFACTORY iface,
46 REFIID riid, LPVOID *ppobj)
48 TRACE("(%s %p)\n", debugstr_guid(riid), ppobj);
50 if (!ppobj)
51 return E_POINTER;
53 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) {
54 *ppobj = iface;
55 return S_OK;
58 WARN("Not supported interface %s\n", debugstr_guid(riid));
60 *ppobj = NULL;
61 return E_NOINTERFACE;
64 /************************************************************************
65 * WBCF_AddRef (IUnknown)
67 static ULONG WINAPI WBCF_AddRef(LPCLASSFACTORY iface)
69 SHDOCVW_LockModule();
71 return 2; /* non-heap based object */
74 /************************************************************************
75 * WBCF_Release (IUnknown)
77 static ULONG WINAPI WBCF_Release(LPCLASSFACTORY iface)
79 SHDOCVW_UnlockModule();
81 return 1; /* non-heap based object */
84 /************************************************************************
85 * WBCF_CreateInstance (IClassFactory)
87 static HRESULT WINAPI WBCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
88 REFIID riid, LPVOID *ppobj)
90 IClassFactoryImpl *This = (IClassFactoryImpl *) iface;
91 return This->cf(pOuter, riid, ppobj);
94 /************************************************************************
95 * WBCF_LockServer (IClassFactory)
97 static HRESULT WINAPI WBCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
99 TRACE("(%d)\n", dolock);
101 if (dolock)
102 SHDOCVW_LockModule();
103 else
104 SHDOCVW_UnlockModule();
106 return S_OK;
109 static const IClassFactoryVtbl WBCF_Vtbl =
111 WBCF_QueryInterface,
112 WBCF_AddRef,
113 WBCF_Release,
114 WBCF_CreateInstance,
115 WBCF_LockServer
118 static IClassFactoryImpl SHDOCVW_WBClassFactory = {&WBCF_Vtbl, WebBrowser_Create};
120 IClassFactory *get_class_factory(void)
122 return (IClassFactory*) &SHDOCVW_WBClassFactory;