Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenclassfactory.cpp
Go to the documentation of this file.
00001 #include <precomp.h> 00002 00003 WINE_DEFAULT_DEBUG_CHANNEL (shell); 00004 00005 class CNetshellClassFactory: public IClassFactory 00006 { 00007 public: 00008 CNetshellClassFactory(REFCLSID rclsid); 00009 00010 /* IUnknown */ 00011 virtual HRESULT WINAPI QueryInterface(REFIID riid, LPVOID *ppvOut); 00012 virtual ULONG WINAPI AddRef(); 00013 virtual ULONG WINAPI Release(); 00014 00015 /* IClassFactory */ 00016 virtual HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject); 00017 virtual HRESULT WINAPI LockServer(BOOL fLock); 00018 00019 private: 00020 LONG ref; 00021 CLSID clsid; 00022 }; 00023 00024 CNetshellClassFactory::CNetshellClassFactory(REFCLSID rclsid) 00025 { 00026 ref = 0; 00027 clsid = rclsid; 00028 } 00029 00030 HRESULT 00031 WINAPI 00032 CNetshellClassFactory::QueryInterface( 00033 REFIID riid, 00034 LPVOID *ppvObj) 00035 { 00036 *ppvObj = NULL; 00037 if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) 00038 { 00039 *ppvObj = (IClassFactory*)this; 00040 InterlockedIncrement(&ref); 00041 return S_OK; 00042 } 00043 return E_NOINTERFACE; 00044 } 00045 00046 ULONG 00047 WINAPI 00048 CNetshellClassFactory::AddRef() 00049 { 00050 ULONG refCount = InterlockedIncrement(&ref); 00051 00052 return refCount; 00053 } 00054 00055 ULONG 00056 WINAPI 00057 CNetshellClassFactory::Release() 00058 { 00059 ULONG refCount = InterlockedDecrement(&ref); 00060 00061 if (!refCount) 00062 { 00063 CoTaskMemFree(this); 00064 return 0; 00065 } 00066 return refCount; 00067 } 00068 00069 HRESULT 00070 WINAPI 00071 CNetshellClassFactory::CreateInstance( 00072 LPUNKNOWN pUnkOuter, 00073 REFIID riid, 00074 LPVOID *ppvObject) 00075 { 00076 *ppvObject = NULL; 00077 00078 if (IsEqualCLSID(clsid, CLSID_NetworkConnections)) 00079 return ISF_NetConnect_Constructor(pUnkOuter, riid, ppvObject); 00080 else if (IsEqualCLSID(clsid, CLSID_ConnectionManager)) 00081 return INetConnectionManager_Constructor(pUnkOuter, riid, ppvObject); 00082 else if (IsEqualCLSID(clsid, CLSID_LANConnectUI)) 00083 return LanConnectUI_Constructor(pUnkOuter, riid, ppvObject); 00084 else if (IsEqualCLSID(clsid, CLSID_LanConnectStatusUI)) 00085 return LanConnectStatusUI_Constructor(pUnkOuter, riid, ppvObject); 00086 00087 return E_NOINTERFACE; 00088 } 00089 00090 HRESULT 00091 WINAPI 00092 CNetshellClassFactory::LockServer(BOOL fLock) 00093 { 00094 return E_NOTIMPL; 00095 } 00096 00097 HRESULT IClassFactory_fnConstructor(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut) 00098 { 00099 CNetshellClassFactory *pClsFactory = new CNetshellClassFactory(rclsid); 00100 if (!pClsFactory) 00101 return E_OUTOFMEMORY; 00102 00103 pClsFactory->AddRef(); 00104 HRESULT hr = pClsFactory->QueryInterface(riid, ppvOut); 00105 pClsFactory->Release(); 00106 00107 return hr; 00108 } Generated on Mon May 28 2012 04:20:40 for ReactOS by
1.7.6.1
|