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