Mendapatkan Objek Layanan

Objek perangkat mengekspos properti yang disebut Services yang mengembalikan kumpulan objek Layanan yang berisi satu objek layanan untuk setiap layanan yang diekspor oleh perangkat. Aplikasi dapat melintasi koleksi ini secara berurutan, atau meminta layanan tertentu dengan menggunakan ID layanannya.

Contoh VBScript

Contoh berikut adalah kode VBScript yang mengekstrak objek Layanan untuk dua layanan yang diekspor oleh perangkat.

' Get the service objects
services = device.Services
    
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )

Baris pertama mengekstrak kumpulan layanan dari objek Perangkat dengan memasukkan kueri pada properti Layanan. Dua baris berikutnya mendapatkan dua objek Layanan yang diinginkan dari koleksi dengan menentukan ID layanan mereka. Koleksi layanan juga dapat dilalui secara berurutan dengan menggunakan untuk setiap ... loop selanjutnya.

Contoh C++

Contoh berikut menunjukkan kode C++ yang diperlukan untuk mendapatkan objek Layanan dari perangkat. Pertama, kode sampel menanyakan properti IUPnPDevice::Services pada antarmuka yang diteruskan ke fungsi. Ini mengembalikan koleksi layanan menggunakan antarmuka IUPnPServices. Untuk mendapatkan objek Layanan individual, gunakan metode Item, dan tentukan ID layanan yang diminta. Untuk melintasi koleksi secara berurutan, gunakan metode IEnumVARIANT::Reset, IEnumVARIANT::Next, dan IEnumVARIANT::Skip. Contoh ini mirip dengan contoh yang digunakan untuk menelusuri koleksi 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;
}