共用方式為


同步搜尋傳回的裝置集合

裝置集合是包含一或多個 Device 物件的物件。 Device 集合會公開 IUPnPDevices 介面,以提供周遊集合及擷取個別裝置物件的方法和屬性。

VBScript 範例

VBScript 應用程式可以透過兩種方式存取集合中的物件。 首先,他們可以使用 for ... 循序周遊元素 每個。。。next 迴圈,如下列範例所示:

for each deviceObj in devices
    MsgBox(deviceObj.FriendlyName)
next

在此範例中,假設 devices 變數已使用先前搜尋的結果初始化。 迴圈會逐步執行集合中的 Device 物件,然後指派變數 deviceObj 每個 Device 物件的值。 迴圈主體可以包含處理 Device 物件的程式碼。

C++ 範例

下列範例顯示存取裝置物件集合中物件所需的 C++ 程式碼。 Shown the function shown, TraverseCollection, receives a pointer to the IUPnPDevices interface as an input parameter. 此介面指標可由 Device Finder 物件的 FindByType方法或其他 Find 方法傳回。

#include <windows.h>
#include <upnp.h>

#pragma comment(lib, "oleaut32.lib")

HRESULT TraverseCollection(IUPnPDevices * pDevices)
{
    IUnknown * pUnk = NULL;
    HRESULT hr = pDevices->get__NewEnum(&pUnk);
    if (SUCCEEDED(hr))
    {
        IEnumVARIANT * pEnumVar = NULL;
        hr = pUnk->QueryInterface(IID_IEnumVARIANT, (void **) &pEnumVar);
        if (SUCCEEDED(hr))
        {
            VARIANT varCurDevice;
            VariantInit(&varCurDevice);
            pEnumVar->Reset();
            // Loop through each device in the collection
            while (S_OK == pEnumVar->Next(1, &varCurDevice, NULL))
            {
                IUPnPDevice * pDevice = NULL;
                IDispatch * pdispDevice = V_DISPATCH(&varCurDevice);
                if (SUCCEEDED(pdispDevice->QueryInterface(IID_IUPnPDevice, (void **) &pDevice)))
                {
                    // Do something interesting with pDevice
                    BSTR bstrName = NULL;
                    if (SUCCEEDED(pDevice->get_FriendlyName(&bstrName)))
                    {
                        OutputDebugStringW(bstrName);
                        SysFreeString(bstrName);
                    }
                }
                VariantClear(&varCurDevice);
                pDevice->Release();
            }
            pEnumVar->Release();
        }
        pUnk->Release();
    }
    return hr;
}

第一個步驟是使用 _NewEnum 屬性要求集合的新列舉值。 這會傳回列舉值做為 IUnknown 介面。 範例程式碼會叫用 IUnknown::QueryInterface 來取得 IEnumVARIANT 介面。 然後,範例程式碼會叫用 IEnumVARIANT::Reset 方法,將列舉值設定為集合的開頭。 最後,範例程式碼會叫用 IEnumVARIANT::Next 方法來周遊集合。 集合中的裝置物件包含在 VARIANT 結構內。 這些結構包含裝置物件上 IDispatch 介面的指標。 為了取得IUPnPDevice介面,範例程式碼會在IDispatch介面上叫用QueryInterface