サービス オブジェクトの取得
デバイス オブジェクトは、 デバイス によってエクスポートされたサービスごとに 1 つのサービス オブジェクトを含む Service オブジェクトのコレクションを返す Services というプロパティを公開します。 アプリケーションは、このコレクションを順番に走査したり、サービス ID を使用して特定のサービスを要求したりすることができます。
VBScript の例
次の例は、デバイスによってエクスポートされた 2 つのサービスの Service オブジェクトを抽出する VBScript コードです。
' Get the service objects
services = device.Services
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )
最初の行は、Services プロパティに対してクエリを実行して、Device オブジェクトから サービス コレクションを抽出します。 次の 2 行は、サービス ID を指定して、コレクションから 2 つの必要な Service オブジェクトを取得します。 サービス コレクションは、 ... ごとに を使用して順番に走査することもできます。next ループ。
C++ の例
次の例は、デバイスから Service オブジェクトを取得するために必要な C++ コードを示しています。 最初に、サンプル コードは、関数に渡されたインターフェイスの IUPnPDevice::Services プロパティに対してクエリを実行します。 これにより、 IUPnPServices インターフェイスを使用してサービス コレクションが返されます。 個々の Service オブジェクトを取得するには、 Item メソッドを使用し、要求されたサービス ID を指定します。 コレクションを順番に走査するには、 IEnumVARIANT::Reset、 IEnumVARIANT::Next、および IEnumVARIANT::Skip メソッドを使用します。 この例は、 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;
}