目标就是实现每创建一个COM实例,就开启一个进程。
通过调用RegisterClassObjects方法实现。ATL默认的实现中参数设置为REGCLS_MULTIPLEUSE,改为REGCLS_SINGLEUSE就可以了。
HRESULT PreMessageLoop(int /*nShowCmd*/) throw(){
HRESULT hr = S_OK;
T* pT = static_cast<T*>(this);
pT;
hr = pT->RegisterClassObjects(CLSCTX_LOCAL_SERVER,
REGCLS_SINGLEUSE/*REGCLS_MULTIPLEUSE*/);
if (hr == S_OK)
{
if (m_bDelayShutdown && !pT->StartMonitor())
{
hr = E_FAIL;
}
}
else
{
m_bDelayShutdown = false;
}
ATLASSERT(SUCCEEDED(hr));
return hr;
}