Поделиться через


Метод IWMDMEnumDevice::Next (mswmdm.h)

Метод Next возвращает указатель на следующее устройство, представленное интерфейсом IWMDMDevice .

Синтаксис

HRESULT Next(
  [in]  ULONG       celt,
  [out] IWMDMDevice **ppDevice,
  [out] ULONG       *pceltFetched
);

Параметры

[in] celt

Количество запрошенных устройств.

[out] ppDevice

Указатель на выделенный вызывающим объектом массив указателей интерфейса IWMDMDevice . Размер этого массива должен быть IWMDMDevice *[celt]. Вызывающий объект должен освободить эти интерфейсы по завершении работы с ними. Чтобы избежать выделения всего массива, просто передайте адрес указателя в интерфейс IWMDMDevice , как показано в разделе Примечания.

[out] pceltFetched

Указатель на переменную, которая получает количество возвращаемых устройств (интерфейсов).

Возвращаемое значение

Метод возвращает HRESULT. Все методы интерфейса в Windows Media диспетчер устройств могут возвращать любой из следующих классов кодов ошибок:

  • Стандартные коды ошибок COM
  • Коды ошибок Windows, преобразованные в значения HRESULT
  • Коды ошибок диспетчер устройств Windows Media
Подробный список возможных кодов ошибок см. в разделе Коды ошибок.

Комментарии

Возвращаемые интерфейсы устройств основаны на кэшированном списке устройств. Если устройство Plug and Play подключено или удалено, текущий перечислитель не будет отражать это, и, следовательно, next вернет устройства на основе кэшированного списка. Приложения должны получить новый объект перечислителя, вызвав IWMDeviceManager::EnumDevices , чтобы получить обновленный список устройств.

Если требуется получить только один интерфейс за раз, не нужно выделять массив для этого метода, как показано в следующем коде:


// Get a device enumerator to examine each device.
CComPtr<IWMDeviceManager2> pIWMDevMgr2;
hr = m_IWMDeviceMgr->QueryInterface (__uuidof(IWMDeviceManager2), (void**) &pIWMDevMgr2);
if (hr == S_OK)
{
    // TODO: Display a message that the application retrieved IWMDeviceManager2.
}
else
{
    // TODO: Display a message that the application was not able to 
    // retrieve IWMDeviceManager2 in EnumDevices.
    return hr;
}

// Enumerate through the devices using the faster EnumDevices2 plug-and-play method.
CComPtr<IWMDMEnumDevice> pEnumDevice;
hr = pIWMDevMgr2->EnumDevices2(&pEnumDevice);
if (hr != S_OK)
{
    //.TODO: Display a message that an error occurred in calling EnumDevices2.
    return hr;
}

// Enumerate through devices.
IWMDMDevice *pIWMDMDevice;
ULONG ulFetched = 0;
while(pEnumDevice->Next(1, &pIWMDMDevice, &ulFetched) == S_OK)
{
    if (ulFetched != 1)
    {
        return E_FAIL;
    }
    // Do some stuff here....
}

Требования

Требование Значение
Целевая платформа Windows
Header mswmdm.h
Библиотека Mssachlp.lib

См. также раздел

Перечисление устройств

Интерфейс IWMDMEnumDevice

IWMDeviceManager::EnumDevices