📄 adminwrap.cpp
字号:
exit(hr);
hr = SetStringProperty(pSub, g_bIID, pwzIID);
exit(hr);
hr = SetStringProperty(pSub, g_bMETHOD, pwzMethod);
exit(hr);
hr = SetStringProperty(pSub, g_bCRITERIA, pwzCriteria);
exit(hr);
hr = pSubs->SaveChanges(&lret);
exit(hr);
fCreate = TRUE;
if (pwzPubProp && pwzPubVal)
{
hr = GetCollection(pSubs, pSub, g_bPUBPROP, &pProps);
exit(hr);
SAFERELEASE(pDisp);
hr = pProps->Add(&pDisp);
exit(hr);
hr = pDisp->QueryInterface(__uuidof(ICatalogObject), (LPVOID*)&pProp);
exit(hr);
hr = SetStringProperty(pProp, g_bNAME, pwzPubProp);
exit(hr);
hr = SetStringProperty(pProp, g_bVALUE, pwzPubVal);
exit(hr);
hr = pProps->SaveChanges(&lret);
exit(hr);
}
fComplete = TRUE;
exit:
if (fCreate && !fComplete)
RemoveSubscription(pwzProgID, pwzSubName);
SAFERELEASE(pDisp);
SAFERELEASE(pProp);
SAFERELEASE(pProps);
SAFERELEASE(pDisp);
SAFERELEASE(pSub);
SAFERELEASE(pSubs);
SAFERELEASE(pComp);
SAFERELEASE(pComps);
SAFERELEASE(pApp);
SAFERELEASE(pApps);
return hr;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Name : CApp::RemoveSubscription
// Purppose : Removes a Persistent Subscription
// Parameters :
// : WCHAR* pwzProgID - Name of the component for which the subscription to be deleted
// : WCHAR* pwzSubName - Name of the subscription
// Return Value : HRESULT
////////////////////////////////////////////////////////////////////////////////////////////////////
HRESULT CApp::RemoveSubscription(WCHAR* pwzProgID, WCHAR* pwzSubName)
{
HRESULT hr =0;
ICatalogObject *pApp =0, *pComp=0;
ICatalogCollection *pApps=0, *pComps=0, *pSubs=0;
if (!m_pAdminCatalog || !m_pwzAppName || !pwzProgID || !pwzSubName)
return E_INVALIDARG;
hr = GetObjectAndCollection(m_pAdminCatalog, g_bAPP, _bstr_t(m_pwzAppName), APPLICATION, &pApps, &pApp);
exit(hr);
hr = GetObjectAndCollection(pApps, pApp, g_bCOMP, _bstr_t(pwzProgID), COMPONENT, &pComps, &pComp);
exit(hr);
hr = GetCollection(pComps, pComp, g_bSUB, &pSubs);
exit(hr);
hr = RemoveNamedObjectFromCollection(pSubs, _bstr_t(pwzSubName), SUBSCRIPTION);
exit:
SAFERELEASE(pSubs);
SAFERELEASE(pApp);
SAFERELEASE(pApps);
return hr;
}
HRESULT CApp::AddTransientSubscription(WCHAR* pwzSubName,CLSID clsidEventClass,IID iidInterface, IUnknown *punk)
{
return AddTransientSubscription(pwzSubName,clsidEventClass,NULL,iidInterface,punk,NULL,NULL,NULL,NULL);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Name : CApp::AddTransientSubscription
// Purppose : Adds a Persistent Subscription
// Parameters :
// : WCHAR* pwzSubName - Name of the subscription
// : CLSID clsidEventClass - EventClass ID
// : WCHAR* pwzPubID - Name of the Publisher
// : IID iidInterface - Interface ID
// : IUnknown* punk - IUnknown* of the subscriber
// : WCHAR* pwzMethod - Method in the interface to subscribe
// : WCHAR* pwzCriteria - Filter Criteria (used in parameterized filtering)
// : WCHAR* pwzPubProp - Publisher Property Name
// : WCHAR* pwzPubVal - Publisher Property Value
// Return Value : HRESULT
////////////////////////////////////////////////////////////////////////////////////////////////////
HRESULT CApp::AddTransientSubscription(WCHAR* pwzSubName,CLSID clsidEventClass, WCHAR* pwzPubID,IID iidInterface, IUnknown *punk, WCHAR* pwzMethod, WCHAR* pwzCriteria, WCHAR* pwzPubProp, WCHAR* pwzPubVal)
{
HRESULT hres = S_OK;
ICatalogObject *pSub=0, *pProp=0;
ICatalogCollection *pSubs=0, *pProps=0;
IDispatch *pDisp=0;
long lret=0;
BOOL fCreate = FALSE, fComplete = FALSE;
WCHAR* pwsEventClass = NULL;
WCHAR* pwsInterfaceIID = NULL;
if (!pwzSubName || !punk)
return E_INVALIDARG;
hres = ::StringFromCLSID(clsidEventClass, &pwsEventClass);
ASSERT_AND_RETURN(hres);
if(IID_NULL == iidInterface)
{
pwsInterfaceIID = NULL;
}
else
{
hres = ::StringFromCLSID(iidInterface, &pwsInterfaceIID);
ASSERT_AND_RETURN(hres);
}
ICOMAdminCatalog* pAdminCat = NULL;
hres = ::CoCreateInstance(__uuidof(COMAdminCatalog), NULL, CLSCTX_SERVER, __uuidof(ICOMAdminCatalog),(LPVOID*) &pAdminCat);
ASSERT_AND_RETURN(hres);
hres = GetCollection(pAdminCat, g_bTRANSSUB, &pSubs);
exit(hres);
pAdminCat->Release();
hres = pSubs->Add(&pDisp);
exit(hres);
hres = pDisp->QueryInterface(__uuidof(ICatalogObject), (LPVOID*)&pSub);
exit(hres);
hres = SetStringProperty(pSub, g_bNAME, pwzSubName);
exit(hres);
hres = SetStringProperty(pSub, g_bECID, pwsEventClass);
exit(hres);
hres = SetStringProperty(pSub, g_bPUBID, pwzPubID);
exit(hres);
hres = SetStringProperty(pSub, g_bIID, pwsInterfaceIID);
exit(hres);
hres = SetIUnknownProperty(pSub, g_bSUBINT, punk);
exit(hres);
hres = SetStringProperty(pSub, g_bMETHOD, pwzMethod);
exit(hres);
hres = SetStringProperty(pSub, g_bCRITERIA, pwzCriteria);
exit(hres);
hres = pSubs->SaveChanges(&lret);
exit(hres);
fCreate = TRUE;
if (pwzPubProp && pwzPubVal)
{
hres = GetCollection(pSubs, pSub, g_bTRANSPUBPROP, &pProps);
exit(hres);
SAFERELEASE(pDisp);
hres = pProps->Add(&pDisp);
exit(hres);
hres = pDisp->QueryInterface(__uuidof(ICatalogObject), (LPVOID*)&pProp);
exit(hres);
hres = SetStringProperty(pProp, g_bNAME, pwzPubProp);
exit(hres);
hres = SetStringProperty(pProp, g_bVALUE, pwzPubVal);
exit(hres);
hres = pProps->SaveChanges(&lret);
exit(hres);
}
fComplete = TRUE;
exit:
if (fCreate && !fComplete)
RemoveTransientSubscription(pwzSubName);
SAFERELEASE(pDisp);
SAFERELEASE(pProp);
SAFERELEASE(pProps);
SAFERELEASE(pSub);
SAFERELEASE(pSubs);
ASSERT_AND_RETURN(hres);
return hres;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Name : CApp::RemoveTransientSubscription
// Purppose : Remolves a Persistent Subscription
// Parameters :
// : WCHAR* pwzSubName - Name of the subscription
// Return Value : HRESULT
////////////////////////////////////////////////////////////////////////////////////////////////////
HRESULT CApp::RemoveTransientSubscription(WCHAR* pwzName)
{
HRESULT hr =0;
ICatalogCollection *pSubs=0;
if (!pwzName)
return E_INVALIDARG;
ICOMAdminCatalog* pAdminCat = NULL;
hr = ::CoCreateInstance(__uuidof(COMAdminCatalog), NULL, CLSCTX_SERVER, __uuidof(ICOMAdminCatalog),(LPVOID*) &pAdminCat);
ASSERT(SUCCEEDED(hr));
hr = GetCollection(pAdminCat, g_bTRANSSUB, &pSubs);
exit(hr);
pAdminCat->Release();
hr = RemoveNamedObjectFromCollection(pSubs, _bstr_t(pwzName), TRANSIENTSUB);
exit:
SAFERELEASE(pSubs);
return hr;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Name : CApp::SetProperty
// Purppose : Sets a property on any component (Application, EventClass, Component, Persistent
// : subscription, Transient subscription, Persistent sub. property bag, Trans sub.
// : property bag)
// Parameters :
// : ADMINTYPE type - Type of the component
// : WCHAR* pwztypename - Value depends on the type
// : WCHAR* pwztypename2 - Value depends on the type
// : WCHAR* pwzPropName - Name of the Property
// Return Value : HRESULT
////////////////////////////////////////////////////////////////////////////////////////////////////
HRESULT CApp::SetProperty(ADMINTYPE type, WCHAR* pwztypename, WCHAR* pwztypename2, WCHAR* pwzPropName, VARIANT& var)
{
HRESULT hr=0;
long lindex;
_bstr_t bname;
VARIANT varname;
ICatalogObject *pApp=0, *pComp=0, *pSub=0, *pProp=0, *pFinal=0;
ICatalogCollection *pApps=0, *pComps=0, *pSubs=0, *pProps=0, *pFinals=0;
IDispatch *pDisp=0;
long lret =0;
// ADMINTYPE pwztypename pwztypename2
//========================================================================
// APPLICATION Ignored Ignored
// COMPONENT progid of the comp Ignored
// SUBSCRIPTION progid of the comp name of the sub
// TRANSIENTSUB name of the sub Ignored
// PUBPROP progid of the comp name of the sub
// TRANSIENTPUBPROP name of the sub Ignored
if (!m_pAdminCatalog || !m_pwzAppName || var.vt == VT_EMPTY)
return E_INVALIDARG;
hr = GetObjectAndCollection(m_pAdminCatalog, g_bAPP, _bstr_t(m_pwzAppName), APPLICATION, &pApps, &pApp);
exit(hr);
bname = pwzPropName;
switch(type)
{
case APPLICATION:
if (!pwzPropName)
exit(hr= E_INVALIDARG);
pFinal = pApp;
pFinals = pApps;
break;
case COMPONENT:
if (!pwztypename || !pwzPropName)
exit(hr= E_INVALIDARG);
hr = GetObjectAndCollection(pApps, pApp, g_bCOMP, _bstr_t(pwztypename), COMPONENT, &pComps, &pComp);
exit(hr);
pFinal = pComp;
pFinals = pComps;
break;
case SUBSCRIPTION:
if (!pwztypename || !pwztypename2 || !pwztypename)
exit(hr= E_INVALIDARG);
hr = GetObjectAndCollection(pApps, pApp, g_bCOMP, _bstr_t(pwztypename), COMPONENT, &pComps, &pComp);
exit(hr);
hr = GetObjectAndCollection(pComps, pComp, g_bSUB, _bstr_t(pwztypename2), SUBSCRIPTION, &pSubs, &pSub);
exit(hr);
pFinal = pSub;
pFinals = pSubs;
break;
case TRANSIENTSUB:
if (!pwzPropName)
exit(hr= E_INVALIDARG);
hr = GetObjectAndCollection(m_pAdminCatalog, g_bTRANSSUB, _bstr_t(pwztypename), TRANSIENTSUB, &pSubs, &pSub);
exit(hr);
pFinal = pSub;
pFinals = pSubs;
break;
case PUBPROP:
if (!pwzPropName || !pwztypename || !pwztypename2)
exit(hr= E_INVALIDARG);
hr = GetObjectAndCollection(pApps, pApp, g_bCOMP, _bstr_t(pwztypename), COMPONENT, &pComps, &pComp);
exit(hr);
hr = GetObjectAndCollection(pComps, pComp, g_bSUB, _bstr_t(pwztypename2), SUBSCRIPTION, &pSubs, &pSub);
exit(hr);
hr = GetCollection(pSubs, pSub, g_bPUBPROP, &pProps);
exit(hr);
hr = GetNamedObjectFromCollection(pProps, g_bNAME, &pProp, &lindex, PUBPROP, _bstr_t(pwzPropName));
if SUCCEEDED(hr) // Change the VALUE
bname = g_bVALUE;
else if (FAILED(hr) && (lindex == -1)) // Create a new NAME/VALUE property
{
hr = pProps->Add(&pDisp);
exit(hr);
hr = pDisp->QueryInterface(__uuidof(IDispatch), (LPVOID*)&pProp);
exit(hr);
varname.bstrVal = SysAllocString(pwzPropName);
if (!varname.bstrVal)
exit(hr=E_OUTOFMEMORY);
varname.vt = VT_BSTR;
hr = pProp->put_Value(g_bNAME, varname);
exit(hr);
bname = g_bVALUE;
pFinal = pProp;
pFinals = pProps;
}
else
exit(hr);
pFinal = pProp;
pFinals = pProps;
break;
case TRANSIENTPUBPROP:
if (!pwzPropName || !pwztypename)
exit(hr= E_INVALIDARG);
hr = GetObjectAndCollection(m_pAdminCatalog, g_bTRANSSUB, _bstr_t(pwztypename), TRANSIENTSUB, &pSubs, &pSub);
exit(hr);
hr = GetCollection(pSubs, pSub, g_bTRANSPUBPROP, &pProps);
exit(hr);
hr = GetNamedObjectFromCollection(pProps, g_bNAME, &pProp, &lindex, TRANSIENTPUBPROP, _bstr_t(pwzPropName));
if SUCCEEDED(hr) // Change the VALUE
bname = g_bVALUE;
else if (FAILED(hr) && (lindex == -1)) // Create a new NAME/VALUE property
{
hr = pProps->Add(&pDisp);
exit(hr);
hr = pDisp->QueryInterface(__uuidof(IDispatch), (LPVOID*)&pProp);
exit(hr);
varname.bstrVal = SysAllocString(pwzPropName);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -