共用方式為


取得服務物件

裝置物件會公開名為 Services 的屬性,這個屬性會傳回服務物件的集合,其中包含裝置所匯出之每個服務的服務物件。 應用程式可以循序周遊此集合,或使用其服務識別碼要求特定服務。

VBScript 範例

下列範例是 VBScript 程式碼,可擷取裝置所匯出兩個服務的 Service 物件。

' 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 物件擷取 服務 集合。 接下來的兩行會藉由指定其服務識別碼,從集合取得兩個所需的 Service 物件。 服務集合也可以使用 每個 ... 的 來循序周遊 next 迴圈。

C++ 範例

下列範例顯示從裝置取得服務物件所需的 C++ 程式碼。 首先,範例程式碼會在傳遞至函式的介面上查詢 IUPnPDevice::Services 屬性。 這會使用 IUPnPServices 介面傳回服務集合。 若要取得個別的服務物件,請使用 Item 方法,並指定要求的服務識別碼。 若要循序周遊集合,請使用 IEnumVARIANT::ResetIEnumVARIANT::NextIEnumVARIANT::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;
}