RegisterClassImplCategories odd behavior
I'm creating several catagories to house my company's functionality, so we
can enumerate these on a machine to see what's available.
For the longest time, this has been working fine with my ATL (in-proc) DLLs,
using RegisterClassImplCategories, however, now I'm trying to use it on an
(out-of-proc) service, and RegisterClassImplCategories returns S_OK, but
OLE/COM Object Viewer doesn't display the addition. Futhermore, I manually
went to the registery and added the Implemented Categories key, and vuala,
it showed up in the viewer. I recompiled which, of course, reregistered it,
running through my RegisterClassImplCategories() again, and it removed my
registry entry, while still returning S_OK.
I have a wrapper interface that handles the naming convention of my
categories, here's the code for the RegisterClassImplCategories() function
call:
//Simple function that really just calls RegisterClassImplCategories()
STDMETHODIMP CProCatRegister::RegisterClassInCategory(REFCLSID clsid, GUID
catid)
{
RPC_STATUS status;
if(::UuidIsNil(&catid, &status)) return DISP_E_PARAMNOTOPTIONAL;
if(::UuidIsNil((UUID*)&clsid, &status)) return DISP_E_PARAMNOTOPTIONAL;
HRESULT hr = E_FAIL;
if(FAILED(m_hrCreate)) return m_hrCreate; //Checks that m_pCatRegister
was created properly in constructor
if(m_pCatRegister)
{
CATID Catid[1] = { catid };
hr = m_pCatRegister->RegisterClassImplCategories(clsid, 1, Catid);
}
return hr;
}
Then in my ATL service's RegisterAppId() function for registering the
service:
HRESULT RegisterAppId(bool bService = false)
{
HRESULT hr = __super::RegisterAppId(bService);
if(SUCCEEDED(hr))
{
CComPtr<IProCatRegister> pCatReg = NULL;
if(SUCCEEDED(pCatReg.CoCreateInstance(CLSID_ProCatRegister)))
{
hr = pCatReg->RegisterCategory(CATID_VideoSource,
(char*)szVideoSrcName); //works fine
if(FAILED(hr)) return hr;
hr =
pCatReg->RegisterClassInCategory(CLSID_ReceiveFrameContainer,
CATID_VideoSource);
if(FAILED(hr)) return hr;
}
}
return hr;
}
Any ideas why all of this works fine for my ATL DLLs, but not this service?
Thanks.