Delen via


Middelen

De bestanden WpdObjectResources.cpp en WpdObjectResources. h bevatten de lidfuncties die een bepaalde resource openen of sluiten, de inhoud van een resource lezen, de kenmerken ophalen die worden ondersteund door een resource en de resources ophalen die worden ondersteund door een bepaald object.

In het geval van het voorbeeldstuurprogramma is er één resource (een voorbeeld van een leesmij-tekstbestand) die zich in het object Documentenmap bevindt.

Wanneer een Windows-toepassing een van de methoden aanroept in de IPortableDeviceResources interface, activeert deze aanroep op zijn beurt een van de verschillende opdrachthandlers in de klasse WpdObjectResources. De volgende tabel identificeert de toewijzing van toepassingsmethoden aan WpdObjectResource-methoden.

WpdObjectResources-opdrachthandler Beschrijving
WpdObjectResources::OnCloseResource Aangeroepen als reactie op het sluiten van het IStream-object dat door OnOpenResource is geretourneerd.
WpdObjectResources::OnGetResourceAttributes. Aangeroepen als reactie op een toepassing die de methode IPortableDeviceResources::GetResourceAttributes aanroept.
WpdObjectResources::OnGetSupportedResources Aangeroepen als reactie op een toepassing die de methode IPortableDeviceResources::GetSuportedResources aanroept.
WpdObjectResources::OnOpenResource Aangeroepen als reactie op een toepassing die de methode IPortableDeviceResources::GetStream aanroept.
WpdObjectResources::OnReadResource Aangeroepen als reactie op een toepassing die de methode IStream::Read aanroept op het IStream-object dat OnOpenResource heeft geretourneerd.

De WpdObjectResources-opdrachthandlers worden aangeroepen door de methode WpdObjectResources::DispatchWpdMessage. Het volgende fragment uit het voorbeeldstuurprogramma bevat de code voor WpdObjectResources::DispatchWpdMessage.

HRESULT WpdObjectResources::DispatchWpdMessage(
    const PROPERTYKEY&     Command,
    IPortableDeviceValues* pParams,
    IPortableDeviceValues* pResults)
{
    HRESULT hr = S_OK;

    if (hr == S_OK)
    {
        if (Command.fmtid != WPD_CATEGORY_OBJECT_RESOURCES)
        {
            hr = E_INVALIDARG;
            CHECK_HR(hr, "This object does not support this command category %ws",CComBSTR(Command.fmtid));
        }
    }

    if (hr == S_OK)
    {
        if (IsEqualPropertyKey(Command, WPD_COMMAND_OBJECT_RESOURCES_GET_SUPPORTED))
        {
            hr = OnGetSupportedResources(pParams, pResults);
            CHECK_HR(hr, "Failed to get supported resources");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_OBJECT_RESOURCES_OPEN))
        {
            hr = OnOpenResource(pParams, pResults);
            CHECK_HR(hr, "Failed to open resource");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_OBJECT_RESOURCES_READ))
        {
            hr = OnReadResource(pParams, pResults);
            CHECK_HR(hr, "Failed to read resource");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_OBJECT_RESOURCES_CLOSE))
        {
            hr = OnCloseResource(pParams, pResults);
            CHECK_HR(hr, "Failed to close resource");
        }
        else if (IsEqualPropertyKey(Command, WPD_COMMAND_OBJECT_RESOURCES_GET_ATTRIBUTES))
        {
            hr = OnGetResourceAttributes(pParams, pResults);
            CHECK_HR(hr, "Failed to get resource attributes");
        }
        else
        {
            hr = E_NOTIMPL;
            CHECK_HR(hr, "This object does not support this command id %d", Command.pid);
        }
    }
    return hr;
}