WINELIB applications (like reaktivate) might have very long (C++)
[wine/wine-kai.git] / dlls / shdocvw / factory.c
blob8e12c2dfdee137ac7ac06b2db5ff24200a52ff03
1 /*
2 * Implementation of class factory for IE Web Browser
4 * 2001 John R. Sheets (for CodeWeavers)
5 */
7 #include <string.h>
8 #include "debugtools.h"
9 #include "shdocvw.h"
11 DEFAULT_DEBUG_CHANNEL(shdocvw);
13 /**********************************************************************
14 * Implement the IWebBrowser class factory
16 * (Based on implementation in ddraw/main.c)
19 /**********************************************************************
20 * WBCF_QueryInterface (IUnknown)
22 static HRESULT WINAPI WBCF_QueryInterface(LPCLASSFACTORY iface,
23 REFIID riid, LPVOID *ppobj)
25 ICOM_THIS(IClassFactoryImpl, iface);
27 TRACE ("\n");
30 * Perform a sanity check on the parameters.
32 if ((This == NULL) || (ppobj == NULL) )
33 return E_INVALIDARG;
35 return E_NOINTERFACE;
38 /************************************************************************
39 * WBCF_AddRef (IUnknown)
41 static ULONG WINAPI WBCF_AddRef(LPCLASSFACTORY iface)
43 ICOM_THIS(IClassFactoryImpl, iface);
45 TRACE("\n");
46 return ++(This->ref);
49 /************************************************************************
50 * WBCF_Release (IUnknown)
52 static ULONG WINAPI WBCF_Release(LPCLASSFACTORY iface)
54 ICOM_THIS(IClassFactoryImpl, iface);
56 /* static class, won't be freed */
57 TRACE("\n");
58 return --(This->ref);
61 /************************************************************************
62 * WBCF_CreateInstance (IClassFactory)
64 static HRESULT WINAPI WBCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
65 REFIID riid, LPVOID *ppobj)
67 ICOM_THIS(IClassFactoryImpl, iface);
69 /* Don't support aggregation (yet?) */
70 if (pOuter)
72 TRACE ("Failed attempt to aggregate IWebBrowser\n");
73 return CLASS_E_NOAGGREGATION;
76 TRACE("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
78 if ((IsEqualGUID (&IID_IOleObject, riid)))
80 TRACE ("Instantiating IOleObject component\n");
81 *ppobj = (LPVOID)&SHDOCVW_OleObject;
83 return S_OK;
85 return CLASS_E_CLASSNOTAVAILABLE;
88 /************************************************************************
89 * WBCF_LockServer (IClassFactory)
91 static HRESULT WINAPI WBCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
93 ICOM_THIS(IClassFactoryImpl, iface);
94 FIXME("(%p)->(%d),stub!\n", This, dolock);
95 return S_OK;
98 static ICOM_VTABLE(IClassFactory) WBCF_Vtbl =
100 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
101 WBCF_QueryInterface,
102 WBCF_AddRef,
103 WBCF_Release,
104 WBCF_CreateInstance,
105 WBCF_LockServer
108 IClassFactoryImpl SHDOCVW_ClassFactory = { &WBCF_Vtbl, 1 };