共用方式為


同步搜尋

Device Finder 物件同時啟用同步和非同步搜尋。 同步搜尋已完成,只有在找到所有可用的裝置之後,才會將控制權傳回給呼叫端應用程式。 若要執行同步搜尋,請使用 IUPnPDeviceFinder 介面的其中一個同步搜尋方法。

注意

同步搜尋至少需要九秒才能傳回。 因為必須多次傳送初始 UDP 搜尋訊息,所以造成延遲。 此重複專案代表基礎網路通訊協定無法運作。 同步搜尋最適合用於命令列介面。 不建議用於圖形化使用者介面。

 

IUPnPDeviceFinder::FindByType方法會依裝置或服務類型搜尋。 這個方法會採用類型 URI 做為輸入參數,並傳回 Device 物件的集合。 Device 物件代表個別裝置。

下列範例示範如何在 VBScript 中執行裝置的同步搜尋。 每個腳本都會使用 IUPnPDeviceFinder::FindByType,以媒體播放機裝置類型 urn:schemas-upnp-org:device:mediaplayer.v1.00.00的類型 URI () 呼叫。 方法會傳回 Device 物件的集合,這些物件對應于找到的媒體播放機裝置。 如需從集合中擷取個別裝置物件的資訊,請參閱 同步搜尋傳回的裝置集合

在 VBScript 中依類型搜尋裝置

Dim deviceFinder

Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )

Dim devices

Set devices = deviceFinder.FindByType( "urn:schemas-upnp-org:device:multidisk-dvd", 0 )

在 C++ 中依類型搜尋裝置

下列範例示範使用 C++ 同步搜尋媒體播放機裝置。 函式會接受 IUPnPDeviceFinder 介面的指標做為輸入,並傳回 IUPnPDevices 介面指標。

此範例會先配置 BSTR 來代表裝置類型 URI,然後將它傳遞至 IUPnPDeviceFinder::FindByType 方法。 它也會在緩衝區中傳遞本機 IUPnPDevices 指標的位址,該方法接著會儲存找到的裝置集合。 如果函式呼叫成功,它會傳回這個集合的指標。

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

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

IUPnPDevices *FindMediaPlayerDevices(IUPnPDeviceFinder *pDeviceFinder)
{
    HRESULT         hr = S_OK;
    IUPnPDevices    * pFoundDevices = NULL;
    BSTR            bstrTypeURI = NULL;

    bstrTypeURI = 
        SysAllocString(L"urn:schemas-upnp-org:device:multidisk-dvd");

    if (bstrTypeURI)
    {
        hr = pDeviceFinder->FindByType(bstrTypeURI, 
                                       0,
                                       &pFoundDevices);

        if (SUCCEEDED(hr))
        {
            wprintf(L"FindMediaPlayerDevices(): "
                    L"Search returned successfully\n");
        }
        else
        {
            fwprintf(stderr, L"FindMediaPlayerDevices(): "
                     L"FindByType search failed - returned "
                     L"HRESULT 0x%x\n",
                     hr);
            pFoundDevices = NULL;
        }
        SysFreeString(bstrTypeURI);
    }
    else
    {
        fwprintf(stderr, L"FindMediaPlayerDevices(): "
                 L"Could not allocate BSTR for type URI\n");
    }

    return pFoundDevices;
}