要想单实例,必须控制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; }
