Obtención de objetos de servicio
Los objetos de dispositivo exponen una propiedad denominada Services que devuelve una colección de objetos Service que contiene un objeto de servicio para cada servicio exportado por el dispositivo. Las aplicaciones pueden recorrer esta colección secuencialmente o solicitar un servicio determinado mediante su identificador de servicio.
Ejemplo de VBScript
El ejemplo siguiente es código VBScript que extrae objetos service para dos de los servicios exportados por 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 primera línea extrae la colección de servicios del objeto Device consultando la propiedad Services . Las dos líneas siguientes obtienen los dos objetos Service deseados de la colección especificando sus identificadores de servicio. La colección de servicios también se puede recorrer secuencialmente mediante un para cada ... siguiente bucle.
Ejemplo de C++
En el ejemplo siguiente se muestra el código de C++ necesario para obtener objetos de servicio de un dispositivo. En primer lugar, el código de ejemplo consulta la propiedad IUPnPDevice::Services en la interfaz que se pasó a la función. Esto devuelve una colección de servicios mediante la interfaz IUPnPServices . Para obtener objetos de servicio individuales, use el método Item y especifique los identificadores de servicio solicitados. Para recorrer secuencialmente la colección, use los métodos IEnumVARIANT::Reset, IEnumVARIANT::Next e IEnumVARIANT::Skip . Este ejemplo es similar al ejemplo que se usa para recorrer la colección 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;
}