IDiaPropertyStorage

Allows you to read the persistent properties of a Debug Interface Access (DIA) property set.

Syntax

IDiaPropertyStorage : IUnknown

Methods in Vtable Order

The following table shows the methods of IDiaPropertyStorage.

Method Description
IDiaPropertyStorage::Enum Gets a pointer to an enumerator for properties within this set.
IDiaPropertyStorage::ReadBOOL Reads BOOL values in a property set.
IDiaPropertyStorage::ReadBSTR Reads BSTR values in a property set.
IDiaPropertyStorage::ReadDWORD Reads DWORD values in a property set.
IDiaPropertyStorage::ReadLONG Reads LONG values in a property set.
IDiaPropertyStorage::ReadMultiple Reads property values in a property set.
IDiaPropertyStorage::ReadPropertyNames Gets corresponding string names for given property identifiers.
IDiaPropertyStorage::ReadULONGLONG Reads ULONGLONG values in a property set.

Remarks

Each property within a property set is identified by a property identifier (ID), a four-byte ULONG value unique to that set. The properties exposed through the IDiaPropertyStorage interface correspond to the properties available in the parent interface. For example, the properties of the IDiaSymbol interface can be accessed by name through the IDiaPropertyStorage interface (note, however, that even though the property may be accessible, it does not mean the property is valid for a particular IDiaSymbol object).

Notes for Callers

Obtain this interface by calling the QueryInterface method on another interface. The following interfaces can be queried for the IDiaPropertyStorage interface:

Example

This example shows a function that displays all properties exposed by the IDiaPropertyStorage object. See the IDiaEnumInjectedSources interface for an example of how the IDiaPropertyStorage interface is obtained from the IDiaInjectedSource interface.

void PrintPropertyStorage(IDiaPropertyStorage* pPropertyStorage)
{
    IEnumSTATPROPSTG* pEnumProps;
    STATPROPSTG       prop;
    DWORD             celt = 1;

    if (pPropertyStorage->Enum(&pEnumProps) == S_OK)
    {
        while (pEnumProps->Next(celt, &prop, &celt) == S_OK)
        {
            PROPSPEC pspec = { PRSPEC_PROPID, prop.propid };
            PROPVARIANT vt = { VT_EMPTY };

            if (pPropertyStorage->ReadMultiple( 1, &pspec, &vt) == S_OK)
            {
                switch( vt.vt ){
                    case VT_BOOL:
                        wprintf( L"%32s:\t %s\n", prop.lpwstrName, vt.bVal ? L"true" : L"false" );
                        break;
                    case VT_I2:
                        wprintf( L"%32s:\t %d\n", prop.lpwstrName, vt.iVal );
                        break;
                    case VT_UI2:
                        wprintf( L"%32s:\t %d\n", prop.lpwstrName, vt.uiVal );
                        break;
                    case VT_I4:
                        wprintf( L"%32s:\t %d\n", prop.lpwstrName, vt.intVal );
                        break;
                    case VT_UI4:
                        wprintf( L"%32s:\t 0x%0x\n", prop.lpwstrName, vt.uintVal );
                        break;
                    case VT_UI8:
                        wprintf( L"%32s:\t 0x%x\n", prop.lpwstrName, vt.uhVal.QuadPart );
                        break;
                    case VT_BSTR:
                        wprintf( L"%32s:\t %s\n", prop.lpwstrName, vt.bstrVal );
                        break;
                    case VT_UNKNOWN:
                        wprintf( L"%32s:\t %p\n", prop.lpwstrName, vt.punkVal );
                        break;
                    case VT_SAFEARRAY:
                        break;
                    default:
                       break;
                }
                VariantClear((VARIANTARG*) &vt);
            }
        }
        pEnumProps->Release();
    }
}

Requirements

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

See also