1.
static NS_METHOD ModuleRegister(nsIComponentManager *aCompMgr,nsIFile *aPath, const char *lpRegisterLocation , const char *lpComponentType, const nsModuleComponentInfo * aInfo)
{
nsresult rv = NS_ERROR_FAILURE;
nsCOMPtr<nsIServiceManager> spSvrMan = do_QueryInterface((nsISupports*)aCompMgr, &rv); if(NS_FAILED(rv)) { return rv; }
nsCOMPtr<nsICategoryManager> spCatMan; spSvrMan->GetServiceByContractID(NS_CATEGORYMANAGER_CONTRACTID, NS_GET_IID(nsICategoryManager) , getter_AddRefs(spCatMan)); if(NS_FAILED(rv)) { return rv; }
char *lpPrevious = nsnull;
rv = spCatMan->AddCategoryEntry("xpcom-startup", HW_COMPONENT_CLASSNAME, HW_COMPONENT_CONTRACTID , PR_TRUE, PR_TRUE, &lpPrevious); if(lpPrevious != NULL) { nsMemory::Free(lpPrevious); lpPrevious = nsnull; }
}
2.
NS_IMPL_ISUPPORTSn(CSSOFfPlugin, nsIObserver...)
3.
class CSSOFfPlugin : public nsIObserver...
{public: CSSOFfPlugin(); ~CSSOFfPlugin();
public: NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER};
4.
NS_IMETHODIMP CSSOFfPlugin::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData){ OutputDebugStringA("CSSOFfPlugin::Observe"); OutputDebugStringA(aTopic);
if(strcmp(aTopic, "xpcom-startup") == 0) { do { nsCOMPtr<nsIServiceManager> spSvrMan; NS_GetServiceManager(getter_AddRefs(spSvrMan)); if(spSvrMan == NULL) break; nsCOMPtr<nsIObserverService> spObsvSvr; spSvrMan->GetServiceByContractID(NS_OBSERVERSERVICE_CONTRACTID, NS_GET_IID(nsIObserverService) , getter_AddRefs(spObsvSvr)); if(spObsvSvr == NULL) break; spObsvSvr->AddObserver((nsIObserver*)this, "quit-application", PR_FALSE);
} while (0); }else if(strcmp(aTopic, "quit-application") == 0) { do { nsCOMPtr<nsIServiceManager> spSvrMan; NS_GetServiceManager(getter_AddRefs(spSvrMan)); if(spSvrMan == NULL) break; nsCOMPtr<nsIObserverService> spObsvSvr; spSvrMan->GetServiceByContractID(NS_OBSERVERSERVICE_CONTRACTID, NS_GET_IID(nsIObserverService) , getter_AddRefs(spObsvSvr)); if(spObsvSvr == NULL) break; spObsvSvr->RemoveObserver((nsIObserver*)this, "quit-application");
} while (0); }
return NS_OK;}