События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Некоторый исходный код, который успешно компилируется, может привести к возникновению сообщений об ошибках при включении проверки типа STRICT. В следующих разделах описаны минимальные требования к компиляции кода при включении STRICT. Рекомендуется выполнить дополнительные действия, особенно для создания переносимого кода.
Основное требование заключается в том, что необходимо объявить правильные типы дескрипторов и указатели функций вместо того, чтобы полагаться на более общие типы. Нельзя использовать один тип дескриптора, где ожидается другой. Это также означает, что вам может потребоваться изменить объявления функций и использовать дополнительные приведения типов.
Для получения наилучших результатов универсальный тип HANDLE следует использовать только при необходимости.
Убедитесь, что все функции приложения объявлены. Размещение всех объявлений функций в файле включения рекомендуется, так как можно легко сканировать объявления и искать параметры и возвращаемые типы, которые должны быть изменены.
Если вы используете параметр компилятора /Zg для создания файлов заголовков для функций, помните, что вы получите разные результаты в зависимости от того, включена ли проверка типа STRICT. При отключении STRICT все типы дескрипторов создают один базовый тип. С поддержкой STRICT они создают различные базовые типы. Чтобы избежать конфликта, необходимо повторно создать файл заголовка при каждом включении или отключении STRICTили изменить файл заголовка, чтобы использовать типы HWND, HDC, HANDLEи т. д. вместо базовых типов.
Все объявления функций, скопированные из Windows.h в исходный код, могут быть изменены, и локальное объявление может быть устаревшим. Удалите локальное объявление.
Некоторые функции имеют универсальные типы возвращаемых данных или параметры. Например, функция SendMessage возвращает данные, которые могут быть любым количеством типов в зависимости от контекста. Если вы видите любую из этих функций в исходном коде, убедитесь, что вы используете правильный приведение типов и что это максимально конкретно. Ниже приведен пример этих функций.
При вызове SendMessage, DefWindowProcили SendDlgItemMessageследует сначала привести результат к типу UINT_PTR. Необходимо выполнить аналогичные действия для любой функции, возвращающей LRESULT или LONG_PTR значение, где результат содержит дескриптор. Это необходимо для написания переносимого кода, так как размер дескриптора зависит от версии Windows. Приведение (UINT_PTR) обеспечивает правильное преобразование. В следующем коде показан пример, в котором SendMessage возвращает дескриптор кисти:
HBRUSH hbr;
hbr = (HBRUSH)(UINT_PTR)SendMessage(hwnd, WM_CTLCOLOR, ..., ...);
Параметр CreateWindow и Параметр CreateWindowExhmen u иногда используется для передачи целочисленного идентификатора элемента управления (ID). В этом случае необходимо привести идентификатор к типу HMENU:
HWND hwnd;
int id;
hwnd = CreateWindow(
TEXT("Button"), TEXT("OK"), BS_PUSHBUTTON,
x, y, cx, cy, hwndParent,
(HMENU)id, // Cast required here
hinst,
NULL);
Чтобы получить большую выгоду от проверки типа STRICT, следует следовать дополнительным рекомендациям. При внесении следующих изменений код будет более переносимым в будущих версиях Windows.
Типы WPARAM, LPARAM, LRESULTи LPVOID являются многоморфными типами данных. Они хранят различные типы данных в разные времена, даже если включена проверка типов STRICT. Чтобы получить преимущество проверки типов, необходимо как можно скорее привести значения этих типов. (Обратите внимание, что средства взлома сообщений автоматически переадресовывание wParam и lParam для вас в переносимом виде.)
Обратите особое внимание, чтобы отличить HMODULE и типах HINSTANCE. Даже если включена STRICT, они определяются как один и тот же базовый тип. Большинство функций управления модулями ядра используют типы HINSTANCE HINSTANCE, но есть несколько функций, которые возвращают или принимают только типы HMOD ULE.
События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!