COMAdminCatalogObject 类

表示 COM+ 目录中集合中的项。 使用它检索和修改由集合中的项公开的属性。

何时实现

此类由 COM+ 实现。

要求
接口 ICatalogObject

何时使用

使用从 COMAdminCatalogObject 类创建的对象修改 COM+ 目录中集合中包含的项的属性。 这些项目对应于组件服务管理工具的控制台树中文件夹内显示的项。 组件服务管理工具中的文件夹对应于目录中的集合,可以使用从 COMAdminCatalogCollection 类创建的对象来表示这些集合。

并非所有通过 COMAdminCatalogCollectionCOMAdminCatalogObject 公开的集合和项都可以在组件服务管理工具中使用。

有关特定集合及其属性的信息,请参阅 COM+ 管理集合

有关 COM+ 编程管理的简介,请参阅 自动化 COM+ 管理

备注

不能直接创建 COMAdminCatalogObject 对象。 若要使用此对象的方法,必须创建 COMAdminCatalog 对象,获取对 ICOMAdminCatalog 的引用,然后使用 ICOMAdminCatalog::GetCollection 获取对表示顶级集合的 ICatalogCollection 接口的引用,或使用 ICatalogCollection::GetCollection 访问不是顶级集合的集合。

对感兴趣的集合的 ICatalogCollection 接口进行引用后,调用 ICatalogCollection::P opulate 以使用集合的所有项填充集合。 通过调用 ICatalogCollection::get_Item 来循环访问集合中的每个项,以获取对每个 ICatalogObject 接口的引用。 找到感兴趣的项后,可以修改项的属性并退出迭代。 如果对集合中的任何项进行任何更改,则必须调用 ICatalogCollection::SaveChanges 以将更改保存到 COM+ 目录。

以下示例中显示了这一点,其中“TopCollection”必须替换为其中一个顶级 COM+ 管理集合的名称;“ItemName”必须替换为您感兴趣的项目的名称;“PropertyName”必须替换为在项目中修改的属性的名称;和 varNewProp 必须替换为包含属性的新值的 VARIANT。

// Convert ItemName to a BSTR.
bstrItemName = SysAllocString(L"ItemName");
HRESULT hr = CoCreateInstance(CLSID_COMAdminCatalog, NULL, 
  CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);
if (FAILED(hr)) exit(0);  // Replace with specific error handling.
hr = pUnknown->QueryInterface(IID_ICOMAdminCatalog, 
  (void**)&pCatalog); 
if (FAILED(hr)) exit(0);  // Replace with specific error handling.
hr = pCatalog->GetCollection(L"TopCollection", 
  (IDispatch**)&pTopColl);
if (FAILED(hr)) exit(0);  // Replace with specific error handling.
// Populate the TopCollection collection.
hr = pTopColl->Populate();
if (FAILED(hr)) exit(0);  // Replace with specific error handling.
// Get the number of items in the collection.
hr = pTopColl->get_Count(&lCount);
if (FAILED(hr)) exit(0);  // Replace with specific error handling.
VARIANT varName;
VariantInit(&varName);
// Iterate through each item in the collection.
for (LONG lIdx = 0; lIdx < lCount; lIdx++) {
    hr = pTopColl->get_Item(lIdx, (IDispatch**)&pItem);
    if (FAILED(hr)) exit(0);  // Replace with specific error handling.
    hr = pItem->get_Name(&varName);
    if (FAILED(hr)) exit(0);  // Replace with specific error handling.
    // Compare the item name to bstrItemName.
    hr = VarBstrCmp(varName.bstrVal, bstrItemName, 1024L, NULL);
    if (FAILED(hr)) exit(0);  // Replace with specific error handling.
    if (VARCMP_EQ == hr) {  // The strings are equal.
        // Use the put_Value method to modify properties of the item.
        hr = pItem->put_Value(L"PropertyName", varNewProp);
        if (FAILED(hr)) exit(0);  // Replace with specific error handling.
        break;  // Exit the iteration.
    }
}
hr = pTopColl->SaveChanges(&lNum);
if (FAILED(hr)) exit(0);  // Replace with specific error handling.
SysFreeString(bstrItemName);


若要从 Microsoft Visual Basic 使用此类,请添加对 COM+ 管理员类型库的引用。 可以通过对 COMAdminCatalog 或 COMAdminCatalogCollection 对象调用 GetCollection 来创建 COMAdminCatalogCollection 对象。

调用 COMAdminCatalogCollection 对象的 Populate 方法以使用集合的所有项填充集合。 循环访问集合中的每个项。 找到感兴趣的项后,可以修改项的属性并退出迭代。 如果对集合中的任何项进行任何更改,则必须调用 COMAdminCatalogCollection 对象的 SaveChanges 方法,以将更改保存到 COM+ 目录。

以下示例中显示了这一点,其中“TopCollection”必须替换为其中一个顶级 COM+ 管理集合的名称;“ItemName”必须替换为您感兴趣的项目的名称;“PropertyName”必须替换为在项目中修改的属性的名称;和 NewPropValue 必须替换为 属性的新值。

Dim objCatalog As COMAdmin.COMAdminCatalog
Set objCatalog = CreateObject("COMAdmin.COMAdminCatalog")
Dim objTopCollection As COMAdmin.COMAdminCatalogCollection
Set objTopCollection = objCatalog.GetCollection("TopCollection")
objTopCollection.Populate
Dim objItem As COMAdmin.COMAdminCatalogObject
For Each objItem in objTopCollection
    If objItem.Name = "ItemName" Then
        objItem.Value("PropertyName") = NewPropValue
        Exit For
    End If
Next
objAppCollection.SaveChanges

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
ComAdmin.h
IDL
ComAdmin.Idl

另请参阅

COMAdminCatalog

COMAdminCatalogCollection

ICatalogObject