要想单实例,必须控制IClassFactory接口。
在你的对象类声明里
加入
DECLARE_CLASSFACTORY_EX(CMyClassFactory)
CMyClassFactory是你从CComClassFactory继承来的。
重载CreateInstance函数。
CreateInstance函数如下
HRESULT CMyClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
REFIID riid, void** ppvObj)
{
_ASSERTE(m_pfnCreateInstance != NULL); HRESULT hRes = E_POINTER;
static void * pObj = NULL; // 用于保存实例指针
// 如果实例已存在直接返回
if(pObj)
{
*ppvObj = pObj;
((LPUNKNOWN)pObj)-> AddRef();
hRes = S_OK;
}
else // 不存在创建新的
{
hRes = m_pfnCreateInstance(pUnkOuter, riid, &pObj);
*ppvObj = pObj;
}
return hRes;
}
用ATL编写的单实例(DLL)服务器的原代码的例子
最新推荐文章于 2024-04-25 07:45:00 发布