同期検索
Device Finder オブジェクトを使用すると、同期検索と非同期検索の両方が有効になります。 同期検索が完了し、使用可能なすべてのデバイスが見つかった後にのみ、呼び出し元のアプリケーションに制御を返します。 同期検索を実行するには、 IUPnPDeviceFinder インターフェイスのいずれかの同期検索方法を使用します。
Note
同期検索が返されるまでに少なくとも 9 秒かかります。 初期 UDP 検索メッセージを複数回送信する必要があるため、遅延が発生します。 この重複は、基になるネットワーク プロトコルの信頼性の低さを考慮します。 同期検索は、コマンド ライン インターフェイスに最適です。 グラフィカル ユーザー インターフェイスには推奨されません。
IUPnPDeviceFinder::FindByType メソッドは、デバイスまたはサービスの種類で検索します。 このメソッドは、入力パラメーターとして URI 型を受け取り、Device オブジェクトのコレクションを返します。 Device オブジェクトは、個々のデバイスを表します。
次の例では、VBScript でデバイスの同期検索を実行する方法を示します。 各スクリプトでは、メディア プレーヤーデバイスの種類 urn:schemas-upnp-org:device:mediaplayer.v1.00.00 の種類 URI (サービス ID) で呼び出された IUPnPDeviceFinder::FindByType を使用します。 メソッドは、検出されたメディア プレーヤー デバイスに対応する 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 インターフェイス ポインターを返します。
この例では、最初にデバイスの種類 URI を表す BSTR を割り当て、これを 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;
}