Вопрос

Наличие отдельной вспомогательной сборки, содержащей только P / вызывать декларации для устаревших компонентов 3-го вечеринок, мне интересно, какое из этих двух способов является лучшим ™, если сборка должна быть отмечена CLS.

  • Использовать Int32 в публичный P / Вызвать декларацию, где у ненужной декларации unsigned int.
  • Использовать UInt32 в ан внутренний P / Вызвать декларацию, где у ненужной декларации unsigned int, и оберните его в публичный метод, который принимает Int32 и преобразует его в UInt32 при звонке внутренний метод.

Что такое вверх и вниз из них?

Это было полезно?

Решение

Marshaller P / Invoke не собирается жаловаться, когда UINT становится слишком большим, вы просто получите отрицательный int. Дополнительный слой позволяет использовать проверено Ключевое слово для генерации OverflowException. Что довольно желательно.

Стоит ли, стоит хлопот, это вторичный вопрос. Много API, как Win32, используйте без подписи как логично ограничение. Как и длина строки или размером блока памяти, он никогда не может быть отрицательным. На практике такое число никогда не может переполнить. Потому что это невозможно выделить много памяти. Я не могу вспомнить, бегал один раз в API, где это был хлопнул, который UINT должен использоваться. Как таковой, я думаю, вы в порядке, просто используете прямое объявление PinVoke с Ints.

Другие советы

Я не думаю, что вы получите правильное поведение, если вы пошли с вариантом 1. INT32 может идти только на 2,147,483647. Тогда как unsigned int идет до 4 294 967,295. Пока вы знаете, вам не нужны никакие значения выше 2 миллиардов, это не имеет значения. Но, чтобы быть технически правильным, общедоступный интерфейс должен разоблачить большее количество и выполнять проверку, чтобы убедиться, что она вписывается в беззнакоменной информации и бросить исключение, если это не так. INT64 будет делать (9,223,372,036,854,775,807).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top