ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

classfactory.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.