Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
classfac.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 2k
Category:
Windows Kernel
Development Platform:
Visual C++
- #include <windows.h>
- #include <objbase.h>
- #include <shlobj.h>
- #include <docobj.h>
- #include "shfolder.h"
- #include "classfac.h"
- extern LONG g_DllRefCount;
- CClassFactory::CClassFactory()
- {
- m_ObjRefCount = 1;
- InterlockedIncrement(&g_DllRefCount);
- }
- CClassFactory::~CClassFactory()
- {
- InterlockedDecrement(&g_DllRefCount);
- }
- STDMETHODIMP
- CClassFactory::QueryInterface(
- REFIID riid,
- LPVOID *ppReturn
- )
- {
- *ppReturn = NULL;
- if(IsEqualIID(riid, IID_IUnknown))
- *ppReturn = (IUnknown*)(CClassFactory*)this;
- else if(IsEqualIID(riid, IID_IClassFactory))
- *ppReturn = (CClassFactory*)this;
- if(*ppReturn == NULL)
- return E_NOINTERFACE;
- (*(LPUNKNOWN*)ppReturn)->AddRef();
- return S_OK;
- }
- STDMETHODIMP_(DWORD)
- CClassFactory::AddRef()
- {
- return InterlockedIncrement(&m_ObjRefCount);
- }
- STDMETHODIMP_(DWORD)
- CClassFactory::Release()
- {
- LONG lDecremented = InterlockedDecrement(&m_ObjRefCount);
- if(lDecremented == 0)
- delete this;
- return lDecremented;
- }
- STDMETHODIMP
- CClassFactory::CreateInstance(
- LPUNKNOWN pUnknown,
- REFIID riid,
- LPVOID *ppObject
- )
- {
- if(pUnknown != NULL)
- return CLASS_E_NOAGGREGATION;
- CShellFolder *pShellFolder = new CShellFolder(NULL, NULL);
- if(NULL == pShellFolder)
- return E_OUTOFMEMORY;
- //
- // get the QueryInterface return for our return value
- //
- HRESULT hResult = pShellFolder->QueryInterface(riid, ppObject);
- //
- // call Release to decrement the ref count
- //
- pShellFolder->Release();
- return hResult;
- }
- STDMETHODIMP
- CClassFactory::LockServer(
- BOOL fLock
- )
- {
- return E_NOTIMPL;
- }