Freigeben über


Abrufen von Dienstobjekten

Geräteobjekte machen eine Eigenschaft namens Services verfügbar, die eine Auflistung von Service-Objekten zurückgibt, die ein Dienstobjekt für jeden vom Gerät exportierten Dienst enthält. Anwendungen können diese Sammlung sequenziell durchlaufen oder einen bestimmten Dienst mithilfe seiner Dienst-ID anfordern.

VBScript-Beispiel

Das folgende Beispiel ist VBScript-Code, der Dienstobjekte für zwei der von einem Gerät exportierten Dienste extrahiert.

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

Die erste Zeile extrahiert die Diensteauflistung aus dem Device-Objekt, indem die Services-Eigenschaft abfragt. Die nächsten beiden Zeilen rufen die beiden gewünschten Service-Objekte aus der Auflistung ab, indem sie ihre Dienst-IDs angeben. Die Dienstesammlung kann auch sequenziell durchlaufen werden, indem ein für jedes ... nächste Schleife.

C++-Beispiel

Das folgende Beispiel zeigt den C++-Code, der zum Abrufen von Service-Objekten von einem Gerät erforderlich ist. Zunächst fragt der Beispielcode die IUPnPDevice::Services-Eigenschaft für die Schnittstelle ab, die an die Funktion übergeben wurde. Dadurch wird eine Dienstauflistung mithilfe der IUPnPServices-Schnittstelle zurückgegeben. Verwenden Sie zum Abrufen einzelner Dienstobjekte die Item-Methode , und geben Sie die angeforderten Dienst-IDs an. Um die Auflistung sequenziell zu durchlaufen, verwenden Sie die Methoden IEnumVARIANT::Reset, IEnumVARIANT::Next und IEnumVARIANT::Skip . Dieses Beispiel ähnelt dem Beispiel, das zum Durchlaufen der IUPnPDevices-Auflistung verwendet wird.

#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;
}