Для получения триального ключа
заполните форму ниже
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Мне интересно попробовать плагин на:
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
Устаревшее описание функций в MSDN, не …

Устаревшее описание функций в MSDN, не учитывающее 64-битность

05 Апр 2013

MSDN является большой базой знаний, и как следствие поддержание ее в актуальном состоянии является крайне сложной и возможно почти неосуществимой задачей. Сейчас в форумах можно встретить вопросы программистов, занимающихся созданием 64-битных приложений и озадаченных описанием некоторых функций в MSDN.

В качестве примера можно привести обсуждение "MSDN 64-bit issue". На рисунке 1 изображен снимок экрана, на котором показано описание функции CListCtrl::SetItemData в on-line версии MSDN. Хотя эта заметка пишется в феврале 2010 года, описание функции до сих пор некорректно. И с высокой вероятностью можно утверждать, что многие другие материалы MSDN также пока не скорректированы с точки зрения 64-битности.

k0017_MSDN_64_bit_issues_ru/image1.png

Рисунок 1 - Описание функции CListCtrl::SetItemData в MSDN Library On-line.

В описании функции CListCtrl::SetItemData изменен только аргумент. Тип параметра dwDara изменен с DWORD на DWORD_PTR. С описанием функции GetItemData ситуация аналогична. Возможно, эта замена делалась в неком автоматическом режиме на основании новых заголовочных файлов. А вот описание самих функций остались прежними и содержат упоминание "32-bit value".

Поставим следующий вопрос. Возможно, прототип функции изменен, но функция по-прежнему сохраняет только 32-бита информации? Можно ответить нет, основываясь на следующих обоснованиях:

1) Логическое обоснование. Часто нужно ассоциировать с элементом списка достаточно много данных. В этом случае данные объединяют в структуру и передают указатель на нее в функцию SetItemData. Разработчики Win64 API не могли лишить программистов такой возможности, а следовательно функция должна уметь хранить 64-битные указатели.

2) Практический эксперимент:

list.SetItemData(0, 0x1111111122222222ui64);
DWORD_PTR value = list.GetItemData(0);
if (value == 0x1111111122222222ui64)
  MessageBox(_T("OK"));

Успешный запуск этого кода в 64-битном приложении подтверждает, что SetItemData позволяет сохранять 64-битные значения.

Вывод. Описание SetItemData, GetItemData и ряда других функций в MSDN Library является устаревшим. Материалы в MSDN регулярно обновляются, и возможно описанная ошибка к настоящему моменту уже исправлена.

Популярные статьи по теме
В macOS 10.15 более не поддерживаются 32-битные приложения. Что вы можете сделать?

Дата: 15 Окт 2019

Автор: Сергей Хренов

7 октября 2019 года Apple выпустила в свет новую версию своей операционной системы для Mac, macOS Catalina. Версия 10.15 содержит множество изменений и улучшений. Одно из значимых – полный отказ от 3…
Простая ошибка при кодировании - не значит нестрашная ошибка

Дата: 19 Апр 2017

Автор: Андрей Карпов

Популяризируя статический анализатор кода PVS-Studio, мы обычно пишем статьи для программистов. Однако, на некоторые вещи программисты смотрят одностороннее. Именно поэтому и существуют менеджеры про…
Как обнаружить переполнение 32-битных переменных в длинных циклах в 64-битной программе?

Дата: 22 Мар 2016

Автор: Андрей Карпов

Одна из проблем, с которой сталкиваются разработчики 64-битных приложений, это переполнение 32-битных переменных в очень длинных циклах. С этой задачей хорошо справляется анализатор кода PVS-Studio (…
Возможен ли запуск 64-битных приложений в 32-битной операционной системе?

Дата: 08 Дек 2015

Автор: Андрей Карпов

В настоящее время широко распространены 64-битные ОС [1]. Но и 32-битные ОС еще присутствуют на рынке в достаточно большом количестве. Многие современные программные средства разрабатываются исключит…
Как перенести проект размером в 9 млн строк кода на 64-битную платформу?

Дата: 03 Авг 2015

Автор: Евгений Рыжков, Илья Иванов

Недавно наша команда завершила миграцию на 64-битную платформу довольного большого проекта (9 млн строк кода, 300Mb исходников). Проект занял полтора года. Хотя в силу NDA мы не можем привести назван…

Комментарии (0)

Следующие комментарии
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно. Хотите узнать подробнее?
Принять