IDiaTable

DIA データ ソース テーブルを列挙します。

構文

IDiaTable : IEnumUnknown

Vtable 順序のメソッド

次の表に、IDiaTable のメソッドを示します。

メソッド 説明
IDiaTable::get__NewEnum この列挙子の IEnumVARIANT インターフェイス バージョンを取得します。
IDiaTable::get_name テーブルの名前を取得します。
IDiaTable::get_Count テーブル内の項目の数を取得します。
IDiaTable::Item 特定のエントリ インデックスへの参照を取得します。

解説

このインターフェイスは、Microsoft.VisualStudio.OLE.Interop 名前空間の、IEnumUnknown 列挙型のメソッドを実装します。 IEnumUnknown 列挙型インターフェイスでは、IDiaTable::get_Count メソッドや IDiaTable::Item メソッドよりも、テーブルの内容の反復処理をはるかに効率的に行うことができます。

(Microsoft.VisualStudio.OLE.Interop 名前空間の) IDiaTable::Item メソッドまたは Next メソッドから返される IUnknown インターフェイスの解釈は、テーブルの型によって異なります。 たとえば、IDiaTable インターフェイスが挿入されたソースのリストを表す場合、IUnknown インターフェースに対して IDiaInjectedSource インターフェイスを照会する必要があります。

呼び出し元に関する注意事項

このインターフェイスを取得するには、IDiaEnumTables::Item または IDiaEnumTables::Next メソッドを呼び出します。

次のインターフェイスは、IDiaTable インターフェイスで実装されています (つまり、IDiaTable インターフェイスに対して、次のいずれかのインターフェイスを照会できます)。

最初の関数の ShowTableNames は、セッション内のすべてのテーブルの名前を表示します。 2 番目の関数の GetTable は、すべてのテーブルを対象に、指定されたインターフェイスを実装するテーブルを検索します。 3 番目の関数の UseTable は、GetTable 関数の使用方法を示します。

Note

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

関連項目