Synchrone Suche
Das Device Finder-Objekt ermöglicht synchrone und asynchrone Suchvorgänge. Synchrone Suchvorgänge werden abgeschlossen und geben erst die Steuerung an die aufrufende Anwendung zurück, nachdem alle verfügbaren Geräte gefunden wurden. Verwenden Sie zum Ausführen einer synchronen Suche eine der synchronen Suchmethoden der IUPnPDeviceFinder-Schnittstelle .
Hinweis
Die Rückgabe synchroner Suchvorgänge dauert mindestens neun Sekunden. Die Verzögerung wird verursacht, weil die anfängliche UDP-Suchnachricht mehrmals gesendet werden muss. Diese Duplizierung macht die Unzuverlässigkeit des zugrunde liegenden Netzwerkprotokolls aus. Synchrone Suchvorgänge eignen sich am besten für Befehlszeilenschnittstellen. Sie werden nicht für grafische Benutzeroberflächen empfohlen.
Die IUPnPDeviceFinder::FindByType-Methode sucht nach Gerät oder Diensttyp. Diese Methode verwendet einen Typ-URI als Eingabeparameter und gibt eine Auflistung von Device-Objekten zurück. Ein Device-Objekt stellt ein einzelnes Gerät dar.
Die folgenden Beispiele veranschaulichen, wie eine synchrone Suche nach Geräten in VBScript ausgeführt wird. Jedes Skript verwendet IUPnPDeviceFinder::FindByType, das mit dem Typ URI (Dienst-ID) für den Media Player-Gerätetyp urn:schemas-upnp-org:device:mediaplayer.v1.00.00 aufgerufen wird. Die -Methode gibt eine Auflistung von Device-Objekten zurück, die den gefundenen Media Player-Geräten entspricht. Informationen zum Extrahieren einzelner Geräteobjekte aus einer Auflistung finden Sie unter Von synchronen Suchvorgängen zurückgegebene Gerätesammlungen.
Suchen nach Geräten nach Typ in VBScript
Dim deviceFinder
Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )
Dim devices
Set devices = deviceFinder.FindByType( "urn:schemas-upnp-org:device:multidisk-dvd", 0 )
Suchen nach Gerät nach Typ in C++
Im folgenden Beispiel wird eine synchrone Suche nach Media Player-Geräten mit C++ veranschaulicht. Die Funktion nimmt einen Zeiger auf die IUPnPDeviceFinder-Schnittstelle als Eingabe an und gibt den IUPnPDevices-Schnittstellenzeiger zurück.
Das Beispiel weist zunächst einen BSTR zu, der den Gerätetyp-URI darstellt, und übergibt diesen dann an die IUPnPDeviceFinder::FindByType-Methode . Außerdem wird die Adresse eines lokalen IUPnPDevices-Zeigers in den Puffer übergeben, in dem die Methode dann die Sammlung der gefundenen Geräte speichert. Wenn der Funktionsaufruf erfolgreich ist, wird der Zeiger auf diese Auflistung zurückgegeben.
#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;
}