⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clsfact.cpp

📁 大量windows shell编程例子
💻 CPP
字号:
/******************************************************************
*
*  Project.....:  Windows View (Namespace Extension)
*
*  Application.:  WINVIEW.dll
*  Module......:  ClsFact.cpp
*  Description.:  IClassFactory implementation
*
*  Compiler....:  MS Visual C++ 
*  Written by..:  D. Esposito
*
*  Environment.:  Windows 9x/NT
*
*******************************/



/*---------------------------------------------------------------*/
//                        INCLUDE section
/*---------------------------------------------------------------*/
#include "ClsFact.h"



/*---------------------------------------------------------------*/
// Class constructor and destructor
/*---------------------------------------------------------------*/
CClassFactory::CClassFactory()
{
m_ObjRefCount = 1;
g_DllRefCount++;
}

CClassFactory::~CClassFactory()
{
g_DllRefCount--;
}



/*---------------------------------------------------------------*/
// IUnknown methods
/*---------------------------------------------------------------*/
STDMETHODIMP CClassFactory::QueryInterface( REFIID riid, LPVOID *ppReturn )
{
	*ppReturn = NULL;

	if( IsEqualIID(riid, IID_IUnknown) )
		*ppReturn = this;
	else 
	if( IsEqualIID(riid, IID_IClassFactory) )
		*ppReturn = (IClassFactory*)this;
	

	if( *ppReturn )
    {
        LPUNKNOWN pUnk = (LPUNKNOWN)(*ppReturn);
		pUnk->AddRef();
		return S_OK;
    }

    return E_NOINTERFACE;
}                                             


STDMETHODIMP_(DWORD) CClassFactory::AddRef()
{
	return ++m_ObjRefCount;
}


STDMETHODIMP_(DWORD) CClassFactory::Release()
{
	if(--m_ObjRefCount == 0)
    {
		delete this;
		return 0;
    }
   
	return m_ObjRefCount;
}



/*---------------------------------------------------------------*/
// IClassFactory methods
/*---------------------------------------------------------------*/
STDMETHODIMP CClassFactory::CreateInstance( LPUNKNOWN pUnknown, 
       REFIID riid, LPVOID *ppObject )
{
	*ppObject = NULL;
	if( pUnknown != NULL )
		return CLASS_E_NOAGGREGATION;

	// creates the namespace's main class
	CShellFolder *pShellFolder = new CShellFolder(NULL, NULL);
	if( NULL==pShellFolder ) 
		return E_OUTOFMEMORY;
  
	// query interface for the return value
	HRESULT hResult = pShellFolder->QueryInterface(riid, ppObject);
	pShellFolder->Release();
	return hResult;
}




/*   End of file: ClsFact.cpp  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -