Obtendo objetos de serviço
Objetos de dispositivo expõem uma propriedade chamada Serviços que retorna uma coleção de objetos de serviço que contém um objeto de serviço para cada serviço exportado pelo dispositivo. Os aplicativos podem percorrer essa coleção sequencialmente ou solicitar um serviço específico usando sua ID de serviço.
Exemplo de VBScript
O exemplo a seguir é o código VBScript que extrai objetos de serviço para dois dos serviços exportados por um dispositivo.
' Get the service objects
services = device.Services
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )
A primeira linha extrai a coleção de serviços do objeto Device consultando a propriedade Services . As duas próximas linhas obtêm os dois objetos de Serviço desejados da coleção especificando suas IDs de serviço. A coleção de serviços também pode ser percorrida sequencialmente usando um para cada... próximo loop.
Exemplo de C++
O exemplo a seguir mostra o código C++ necessário para obter objetos de serviço de um dispositivo. Primeiro, o código de exemplo consulta a propriedade IUPnPDevice::Services na interface que foi passada para a função. Isso retorna uma coleção de serviços usando a interface IUPnPServices . Para obter objetos de serviço individuais, use o método Item e especifique as IDs de serviço solicitadas. Para percorrer a coleção sequencialmente, use os métodos IEnumVARIANT::Reset, IEnumVARIANT::Next e IEnumVARIANT::Skip . Este exemplo é semelhante ao exemplo usado para percorrer a coleção 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;
}