CATHELP.CPP
//=--------------------------------------------------------------------------= 
// CatHelp.Cpp 
//=--------------------------------------------------------------------------= 
// Copyright 1995 - 1998 Microsoft Corporation.  All Rights Reserved. 
// 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF  
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO  
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A  
// PARTICULAR PURPOSE. 
//=--------------------------------------------------------------------------= 
// 
// contains the Component Category helper functions. 
// 
 
#include "comcat.h" 
 
// Helper function to create a component category and associated description 
HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription) 
{ 
 
    ICatRegister* pcr = NULL ; 
    HRESULT hr = S_OK ; 
 
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,  
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); 
if (FAILED(hr)) 
return hr; 
 
    // Make sure the HKCR\Component Categories\{..catid...} 
    // key is registered 
    CATEGORYINFO catinfo; 
    catinfo.catid = catid; 
    catinfo.lcid = 0x0409 ; // english 
 
// Make sure the provided description is not too long. 
// Only copy the first 127 characters if it is 
int len = wcslen(catDescription); 
if (len>127) 
len = 127; 
    wcsncpy(catinfo.szDescription, catDescription, len); 
// Make sure the description is null terminated 
catinfo.szDescription[len] = '\0'; 
 
    hr = pcr->RegisterCategories(1, &catinfo); 
pcr->Release(); 
 
return hr; 
} 
 
// Helper function to register a CLSID as belonging to a component category 
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid) 
{ 
// Register your component categories information. 
    ICatRegister* pcr = NULL ; 
    HRESULT hr = S_OK ; 
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,  
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); 
    if (SUCCEEDED(hr)) 
    { 
       // Register this category as being "implemented" by 
       // the class. 
       CATID rgcatid[1] ; 
       rgcatid[0] = catid; 
       hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid); 
    } 
 
    if (pcr != NULL) 
        pcr->Release(); 
   
return hr; 
} 
 
// Helper function to unregister a CLSID as belonging to a component category 
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid) 
{ 
    ICatRegister* pcr = NULL ; 
    HRESULT hr = S_OK ; 
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,  
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr); 
    if (SUCCEEDED(hr)) 
    { 
       // Unregister this category as being "implemented" by 
       // the class. 
       CATID rgcatid[1] ; 
       rgcatid[0] = catid; 
       hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid); 
    } 
 
    if (pcr != NULL) 
        pcr->Release(); 
   
return hr; 
}