?? factory.h
字號:
#if !defined(AFX_DEMO_H__9DEBDCD4_4592_4D30_9E32_CE26148DB12C__INCLUDED_)
#define AFX_DEMO_H__9DEBDCD4_4592_4D30_9E32_CE26148DB12C__INCLUDED_
#include <winsock2.h>
#include <windows.h>
#ifdef __SELF_REGISTER_H__
#define CLSID_MYCLSID CLSID_VAEC
extern const CLSID CLSID_VAEC;
const char g_szFriendlyName[] = "VAEC component";
const char g_szVerIndProgID[] = "VAEC";
const char g_szProgID[] = "VAEC.1";
#endif
#ifndef USE_LIB
class CFactory : public IClassFactory
{
public:
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv)
{
if ((iid == IID_IUnknown) || (iid == IID_IClassFactory))
{
*ppv = static_cast<IClassFactory*>(this) ;
}
else
{
*ppv = NULL ;
return E_NOINTERFACE ;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef() ;
return S_OK ;
}
virtual ULONG __stdcall AddRef()
{
return InterlockedIncrement(&m_cRef) ;
}
virtual ULONG __stdcall Release()
{
if (InterlockedDecrement(&m_cRef) == 0)
delete this ;
return m_cRef ;
}
virtual HRESULT __stdcall CreateInstance(IUnknown* pUnknownOuter,
const IID& iid,
void** ppv);
virtual HRESULT __stdcall LockServer(BOOL bLock)
{
return E_NOTIMPL;
}
CFactory()
{
m_cRef=0;
}
~CFactory()
{
}
static HRESULT CanUnloadNow()
{
if (m_nComObjsInUse== 0)
return S_OK;
else
return S_FALSE;
}
#ifdef __SELF_REGISTER_H__
static HRESULT UnRegister() { return UnregisterServer(CLSID_MYCLSID,g_szVerIndProgID,g_szProgID); }
static HRESULT Register() { HRESULT hr; hr=RegisterServer(m_hModule, CLSID_MYCLSID, g_szFriendlyName,g_szVerIndProgID,g_szProgID); return hr;}
#else
static HRESULT UnRegister()
{
return E_FAIL;
}
static HRESULT Register()
{
return E_FAIL;
}
#endif//__SELF_REGISTER_H__
static CloseServer()
{
}
static HRESULT GetClassObject(const CLSID& clsid,const IID& iid,void** ppv)
{
HRESULT hRes;
//if (clsid == CLSID_MYCLSID)
//{
CFactory *pFact = new CFactory;
if (pFact == NULL)
return E_OUTOFMEMORY;
else
{
hRes = pFact->QueryInterface(iid , ppv);
return hRes;
}
//}
return CLASS_E_CLASSNOTAVAILABLE;
}
static void AddObjInUse()
{
InterlockedIncrement(&CFactory::m_nComObjsInUse);
}
static void ReleaseObjInUse()
{
InterlockedDecrement(&CFactory::m_nComObjsInUse);
if(CFactory::m_nComObjsInUse<=0)
{
CFactory::CloseServer();
}
}
static HMODULE m_hModule;
static long m_nComObjsInUse;
private:
long m_cRef ;
} ;
#endif
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -