Condividi tramite


Recupero di oggetti servizio

Gli oggetti dispositivo espongono una proprietà denominata Services che restituisce una raccolta di oggetti Service che contiene un oggetto servizio per ogni servizio esportato dal dispositivo. Le applicazioni possono attraversare questa raccolta in sequenza o richiedere un servizio specifico usando il relativo ID servizio.

Esempio di VBScript

L'esempio seguente è codice VBScript che estrae gli oggetti Service per due dei servizi esportati da un dispositivo.

' Get the service objects
services = device.Services
    
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )

La prima riga estrae l'insieme di servizi dall'oggetto Device eseguendo una query sulla proprietà Services . Le due righe successive ottengono i due oggetti Service desiderati dall'insieme specificando i relativi ID di servizio. La raccolta di servizi può anche essere attraversata in sequenza utilizzando un oggetto per ogni ... ciclo successivo .

Esempio C++

L'esempio seguente mostra il codice C++ necessario per ottenere oggetti Service da un dispositivo. Innanzitutto, il codice di esempio esegue una query sulla proprietà IUPnPDevice::Services sull'interfaccia passata alla funzione. Viene restituita una raccolta di servizi usando l'interfaccia IUPnPServices . Per ottenere singoli oggetti Service, utilizzare il metodo Item e specificare gli ID del servizio richiesti. Per attraversare la raccolta in sequenza, usare i metodi IEnumVARIANT::Reset, IEnumVARIANT::Next e IEnumVARIANT::Skip . Questo esempio è simile all'esempio usato per attraversare l'insieme IUPnPDevices .

#include <windows.h>
#include <upnp.h>

#pragma comment(lib, "oleaut32.lib")


HRESULT ExtractServices(IUPnPDevice * pDevice)
{
    // Create a BSTR to hold the service name
    BSTR bstrServiceName = SysAllocString(L"urn:upnp-org:servicId:DVDVideo");
    if (NULL == bstrServiceName)
    {
        return E_OUTOFMEMORY;
    }
    // Get the list of services available on the device
    IUPnPServices * pServices = NULL;
    HRESULT hr = pDevice->get_Services(&pServices);
    if (SUCCEEDED(hr))
    {
        // Retrieve the service we are interested in
        IUPnPService * pAppService = NULL;
        hr = pServices->get_Item(bstrServiceName, &pAppService);
        if (SUCCEEDED(hr))
        {
            // Do something interesting with the service object
            pAppService->Release();
        }
        pServices->Release();
    }
    SysFreeString(bstrServiceName);
    return hr;
}