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

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

В качестве примера можно привести обсуждение "[MSDN 64\-bit issue](https://social.msdn.microsoft.com/Forums/en-US/a5f7f68d-553b-4823-89d5-d240b4675bfc/msdn-64bit-issue?forum=netfx64bit)"\. На рисунке 1 изображен снимок экрана, на котором показано описание функции CListCtrl::SetItemData в on\-line версии MSDN\. Хотя эта заметка пишется в феврале 2010 года, описание функции до сих пор некорректно\. И с высокой вероятностью можно утверждать, что многие другие материалы MSDN также пока не скорректированы с точки зрения 64\-битности\.

![k0017_MSDN_64_bit_issues_ru/image1.png](https://import.viva64.com/docx/blog/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](https://pvs-studio.ru/ru/blog/terms/0055/) API не могли лишить программистов такой возможности, а следовательно функция должна уметь хранить 64\-битные указатели\.

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

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

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

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