Как получить согласованный список устройств через Setup API?

Кажется, что ваш реальный вопрос:

Почему:

null >= 0; // true

Но:

null == 0; // false

Что действительно происходит, так это то, что Оператор большего или равного (>=) выполняет принуждение типа ( ToPrimitive ) с типом hint Number, на самом деле все реляционные операторы имеют такое поведение.

null особым образом обрабатывается оператором равенства (==). Вкратце, только принуждает к undefined:

null == null; // true
null == undefined; // true

Значения, такие как false, '', '0' и [], подлежат к числовому типу принуждения, все из них принуждают к нулю.

Вы можете увидеть внутренние детали этого процесса в Алгоритм сравнения абстрактного равенства и . Абстрактное реляционное сравнение Алгоритм .

В резюме:

  • Реляционное сравнение: если оба значения не являются строковыми, то на обоих вызывается ToNumber. Это то же самое, что добавить перед + фронт, который для нулевых когерентностей равен 0.
  • Сравнение равенств: только вызовы ToNumber для строк, чисел и логических элементов.

0
задан Willy K. 11 March 2019 в 15:30
поделиться

1 ответ

Я думаю, что проблема здесь в том, что getPCIHWAddr () использует индекс набора информации об устройстве, который уже уничтожен. Я добавил функцию, которая возвращает указатели на HDEVINFO и SP_DEVINFO_DATA, но не вызывает SetupDiDestroyDeviceInfoList (), это делается методом getPCIHWAddr () после того, как он выполнил свою работу - и вижу: Это работает (Win7 и Win10).

0
ответ дан Willy K. 11 March 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: