次の方法で共有


サービス オブジェクトの取得

デバイス オブジェクトは、 デバイス によってエクスポートされたサービスごとに 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::ResetIEnumVARIANT::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;
}