取得服務物件
裝置物件會公開名為 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::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;
}