要想单实例,必须控制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)服务器的原代码的例子
最新推荐文章于 2019-10-12 13:43:06 发布
本文介绍如何通过控制IClassFactory接口实现单实例COM对象。主要步骤包括:在对象类中声明DECLARE_CLASSFACTORY_EX宏,定义CMyClassFactory类继承自CComClassFactory,并重载CreateInstance函数来确保只有一个实例被创建。
1100

被折叠的 条评论
为什么被折叠?



