Obtention d’objets de service
Les objets d’appareil exposent une propriété appelée Services qui renvoie une collection d’objets Service qui contient un objet de service pour chaque service exporté par l’appareil. Les applications peuvent parcourir cette collection de manière séquentielle ou demander un service particulier à l’aide de son ID de service.
Exemple VBScript
L’exemple suivant est du code VBScript qui extrait des objets Service pour deux des services exportés par un appareil.
' Get the service objects
services = device.Services
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )
La première ligne extrait la collection de services de l’objet Device en interrogeant la propriété Services . Les deux lignes suivantes obtiennent les deux objets Service souhaités de la collection en spécifiant leurs ID de service. La collection de services peut également être parcourue séquentiellement à l’aide d’un pour chaque ... boucle suivante .
Exemple C++
L’exemple suivant montre le code C++ requis pour obtenir des objets Service à partir d’un appareil. Tout d’abord, l’exemple de code interroge la propriété IUPnPDevice::Services sur l’interface qui a été passée à la fonction . Cette opération retourne une collection de services à l’aide de l’interface IUPnPServices . Pour obtenir des objets Service individuels, utilisez la méthode Item et spécifiez les ID de service demandés. Pour parcourir la collection de manière séquentielle, utilisez les méthodes IEnumVARIANT::Reset, IEnumVARIANT::Next et IEnumVARIANT::Skip . Cet exemple est similaire à l’exemple utilisé pour parcourir la collection 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;
}