HRESULT RegisterCLSIDInCategory(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)) { //注冊已實現的類到分組 CATID rgcatid[1]; rgcatid[0] = catid; hr = pcr->RegisterClassImplCategories(clsid,1,rgcatid); } if(pcr != NULL) pcr->Release(); return hr; }
ActiveX的注冊是在函數DLLRegisterServer中進行的,在組件中 DLLRegisterServer 函數調用了CreateComponentCategory和RegisterCLSIDInCategory函數來保證控件的安全性初始化和腳本操作。所以DLLRegisterServer應添加如下代碼:
//注冊控件是安全性初始化的 hr=CreateComponentCategory(CATID_SafeForInitializing,L"Controls safely initializable from persistent data!"); if(FAILED(hr))return hr; CLSID m_clsid;//本控件的的clsid CLSIDFromString(L"{0F968806-D214-11D5-9022-5254AB123A61}",&m_clsid); hr=RegisterCLSIDInCategory(m_clsid,CATID_SafeForInitializing); if(FAILED(hr))return hr; //注冊控件是安全性腳本操作的 hr=CreateComponentCategory(CATID_SafeForScripting,L"Controls safely scriptable!"); if(FAILED(hr))return hr; hr=Regist |