IDiaTable

枚举 DIA 数据源表。

语法

IDiaTable : IEnumUnknown

Vtable 顺序中的方法

下表显示了 IDiaTable 方法。

方法 说明
IDiaTable::get__NewEnum 检索该枚举器的 IEnumVARIANT Interface 版本。
IDiaTable::get_name 检索表名称。
IDiaTable::get_Count 检索表中的项数。
IDiaTable::Item 检索对特定条目索引的引用。

备注

此接口实现 Microsoft.VisualStudio.OLE.Interop 命名空间中的 IEnumUnknown 枚举方法。 相比 IDiaTable::get_CountIDiaTable::Item 方法,IEnumUnknown 枚举接口在循环访问表内容时要高效得多。

IDiaTable::Item 方法或 Next 方法(在 Microsoft.VisualStudio.OLE.Interop 命名空间中)返回的 IUnknown 接口的解释取决于表类型。 例如,如果 IDiaTable 接口表示注入源代码列表,则应对 IDiaInjectedSource 接口查询 IUnknown 接口。

对调用者的说明

通过调用 IDiaEnumTables::ItemIDiaEnumTables::Next 方法获取此接口。

以下接口是使用 IDiaTable 接口实现的(也就是说,你可以在下列接口之一查询 IDiaTable 接口):

示例

第一个函数 ShowTableNames 显示会话中所有表的名称。 第二个函数 GetTable 在所有表中搜索实现指定接口的表。 第三个函数 UseTable 演示如何使用 GetTable 函数。

注意

CDiaBSTR 是一个类,在实例化超出范围时,它会包装 BSTR 并自动处理释放字符串。

void ShowTableNames(IDiaSession *pSession)
{
    CComPtr<IDiaEnumTables> pTables;
    if ( FAILED( psession->getEnumTables( &pTables ) ) )
    {
        Fatal( "getEnumTables" );
    }
    CComPtr< IDiaTable > pTable;
    while ( SUCCEEDED( hr = pTables->Next( 1, &pTable, &celt ) )
            && celt == 1 )
    {
        CDiaBSTR bstrTableName;
        if ( pTable->get_name( &bstrTableName ) != 0 )
        {
            Fatal( "get_name" );
        }
        printf( "Found table: %ws\n", bstrTableName );
    }

// Searches the list of all tables for a table that supports
// the specified interface.  Use this function to obtain an
// enumeration interface.
HRESULT GetTable(IDiaSession* pSession,
                 REFIID       iid,
                 void**       ppUnk)
{
    CComPtr<IDiaEnumTables> pEnumTables;
    HRESULT hResult;

    if (FAILED(pSession->getEnumTables(&pEnumTables)))
        Fatal("getEnumTables");

    CComPtr<IDiaTable> pTable;
    ULONG celt = 0;
    while (SUCCEEDED(hResult = pEnumTables->Next(1, &pTable, &celt)) &&
           celt == 1)
    {
        if (pTable->QueryInterface(iid, (void**)ppUnk) == S_OK)
        {
            return S_OK;
        }
        pTable = NULL;
    }

    if (FAILED(hResult))
        Fatal("EnumTables->Next");

    return E_FAIL;
}

// This function shows how to use the GetTable function.
void UseTable(IDiaSession *pSession)
{
    CComPtr<IDiaEnumSegments> pEnumSegments;
    if (SUCCEEDED(GetTable(pSession, __uuidof(IDiaEnumSegments), &pEnumSegments)))
    {
        // Do something with pEnumSegments.
    }
}

要求

标头:Dia2.h

库:diaguids.lib

DLL:msdia80.dll

另请参阅