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

📄 urlfmain.cpp

📁 大量windows shell编程例子
💻 CPP
字号:
// DllMain
// CClassFactory implementation

#include "stdhdr.h"
#include "Urlfmain.h"
#include "Urlffold.h"

#define INITGUID
#include <initguid.h>
DEFINE_GUID( CLSID_UrlfFolder, 0x04051965, 0x0fcc, 0x11ce, 0xbc, 0xb0,
    0xb3, 0xfd, 0x0e, 0x25, 0x38, 0x41 );



/*---------------------------------------------------------------*/
//                        GLOBAL section
/*---------------------------------------------------------------*/
UINT        g_cRefThisDll = 0;  
HINSTANCE   g_hInstance;        




/*-------------------------------------------------------------------*/
// Procedure....: DllMain()
// Description..: Library main function
// Input........: HINSTANCE, DWORD, LPVOID
// Output.......: INT
/*-------------------------------------------------------------------*/
extern "C" 
INT APIENTRY DllMain( HINSTANCE hInstance, DWORD dwReason, 
	  LPVOID lpReserved)
{
    if( dwReason==DLL_PROCESS_ATTACH )
	{
		g_hInstance = hInstance;
	}

    return TRUE;
}







// In-process server functions






/*-------------------------------------------------------------------*/
// Procedure....: DllGetClassObject()
// Description..: create a class factory object
// Input........: REFCLSID, REFIID, LPVOID
// Output.......: HRESULT (success/failure)
/*-------------------------------------------------------------------*/
STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, LPVOID *ppv )
{
    *ppv = NULL;
    
	// make sure the class ID is CLSID_UrlfFolder
    if( !IsEqualCLSID(rclsid, CLSID_UrlfFolder) )
        return ResultFromScode ( CLASS_E_CLASSNOTAVAILABLE );
    
    // instantiate a class factory object.
    CClassFactory *pClassFactory = new CClassFactory();

    if( pClassFactory == NULL )
        return ResultFromScode( E_OUTOFMEMORY );

    // get the interface pointer 
    HRESULT hr = pClassFactory->QueryInterface( riid, ppv );
    pClassFactory->Release();
    return hr;
}




						    


/*-------------------------------------------------------------------*/
// Procedure....: DllCanUnloadNow()
// Description..: unload if reference count is 0
// Input........: VOID
// Output.......: HRESULT (yes/no)
/*-------------------------------------------------------------------*/
STDAPI DllCanUnloadNow( void )
{
	return ResultFromScode( (g_cRefThisDll==0) ?S_OK :S_FALSE );
}




								  








// CClassFactory member functions			 



/*-------------------------------------------------------------------*/
// Procedure....: CClassFactory()
// Description..: Constructor of the class
// Input........: VOID
// Output.......: 
/*-------------------------------------------------------------------*/
CClassFactory::CClassFactory()
{
    m_cRef = 1;
    g_cRefThisDll++;
}






/*-------------------------------------------------------------------*/
// Procedure....: ~CClassFactory()
// Description..: Destructor of the class
// Input........: VOID
// Output.......: 
/*-------------------------------------------------------------------*/
CClassFactory::~CClassFactory()
{
    g_cRefThisDll--;
}










/*-------------------------------------------------------------------*/
// Procedure....: ::QueryInterface()
// Description..: return a pointer to the specified interface
// Input........: REFIID, LPVOID
// Output.......: HRESULT
/*-------------------------------------------------------------------*/
STDMETHODIMP CClassFactory::QueryInterface( REFIID riid, LPVOID FAR *ppv )
{
    if( IsEqualIID(riid, IID_IUnknown) ) 
	{
        *ppv = (LPUNKNOWN) (LPCLASSFACTORY) this;
        m_cRef++;
        return NOERROR;
    }
    else 
	if( IsEqualIID(riid, IID_IClassFactory) ) 
	{
        *ppv = (LPCLASSFACTORY) this;
        m_cRef++;
        return NOERROR;
    }
    else 
	{  
        *ppv = NULL;
        return ResultFromScode( E_NOINTERFACE );
    }
}





/*-------------------------------------------------------------------*/
// Procedure....: ::AddRef()
// Description..: increase the reference count for the server 
// Input........: VOID
// Output.......: ULONG
/*-------------------------------------------------------------------*/
STDMETHODIMP_(ULONG) CClassFactory::AddRef()
{
    return ++m_cRef;
}





/*-------------------------------------------------------------------*/
// Procedure....: ::Release()
// Description..: decrease the reference count for the server 
// Input........: VOID
// Output.......: ULONG
/*-------------------------------------------------------------------*/
STDMETHODIMP_(ULONG) CClassFactory::Release()
{
    if( --m_cRef==0 )
        delete this;
    return m_cRef;
}








/*-------------------------------------------------------------------*/
// Procedure....: ::CreateInstance()
// Description..: create a shell extension object
// Input........: LPUNKNOWN, REFIID, LPVOID
// Output.......: HRESULT
/*-------------------------------------------------------------------*/
STDMETHODIMP CClassFactory::CreateInstance( LPUNKNOWN pUnkOuter, REFIID riid,
    LPVOID FAR *ppvObj )
{
    *ppvObj = NULL;

    
    // don't support aggregation
    if( pUnkOuter != NULL )
        return ResultFromScode( CLASS_E_NOAGGREGATION );

    // instantiate a shell extension object
    CUrlfFolder *pUrlfFolder = new CUrlfFolder();
    if( pUrlfFolder == NULL )
        return ResultFromScode( E_OUTOFMEMORY );

    // get the interface pointer 
    HRESULT hr = pUrlfFolder->QueryInterface( riid, ppvObj );
    pUrlfFolder->Release();
    return hr;
}




/*-------------------------------------------------------------------*/
// Procedure....: ::LockServer()
// Description..: inc/dec the lock count (not implemented)
// Input........: BOOL
// Output.......: HRESULT
/*-------------------------------------------------------------------*/
STDMETHODIMP CClassFactory::LockServer( BOOL fLock )
{
    return ResultFromScode( E_NOTIMPL );
}









⌨️ 快捷键说明

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