LVITEM для Windows 64 бит

Долгое время я пытался использоватьLVM_GETITEMW сообщение сLVIF_TEXT маска для получения текста ListView. Моя программа работала в 32-битной, но не в 64-битной архитектуре.

Я обнаружил, что проблема была вLVITEM структура. Вкратце, мой вопрос в том, какая структура подходит для 64-битной системы и почему.

Структура, которую я использовал в качествеLVITEMW Структура имела следующие поля:

('mask', c_uint32),
('iItem', c_int32),
('iSubItem', c_int32),
('state', c_uint32),
('stateMask', c_uint32),
('pszText', c_uint32),
('cchTextMax', c_int32),
('iImage', c_int32),
('lParam', c_uint64),
('iIndent', c_int32),
('iGroupId', c_int32),
('cColumns', c_uint32),
('puColumns', c_uint32),
('piColFmt', c_int32),
('iGroup', c_int32)

(Написано на python 2.7 ctypes, но это всего лишь форма письма - язык действительно не имеет значения).

Эти поля так же, какдокументированный.

После долгих поисков я нашел этоФорум который имел именно то, что мне было нужно - 64-битное решение!

Таким образом, в 64-битной структуре должно быть больше «пробелов», и она должна выглядеть примерно так (указатели теперь 64-битные, а такжеstateMask это 64 бит Это немного отличается от предложенного на форуме, но тоже работает):

('mask', c_uint32),
('iItem', c_int32),
('iSubItem', c_int32),
('state', c_uint32),
('stateMask', c_uint64), <-- Now 64 bit
('pszText', c_uint64), <-- Now 64 bit which makes sense since this is a pointer
('cchTextMax', c_int32),
('iImage', c_int32),
('lParam', c_uint64),
('iIndent', c_int32),
('iGroupId', c_int32),
('cColumns', c_uint32),
('puColumns', c_uint64), <-- Now 64 bit which makes sense since this is a pointer
('piColFmt', c_int64), <-- Now 64 bit which makes sense since this is a pointer
('iGroup', c_int32)

На форуме предлагается иметь:

('mask', c_uint32),
('iItem', c_int32),
('iSubItem', c_int32),
('state', c_uint32),
('stateMask', c_uint64),
('pszText', c_uint64),
('cchTextMax', c_int32),
('iImage', c_int64), <-- Now 64 bit
('lParam', c_uint32),
('iIndent', c_int32),
('iGroupId', c_int32),
('cColumns', c_uint32),
('puColumns', c_uint32),
('piColFmt', c_int32),
('iGroup', c_int64), <-- Now 128 bit all together
('iGroup2', c_int64) <-- continuation

Который также работает, в списке для моей потребности, который является текстом, указанным pszText.

И мои вопросы:

Это где-нибудь задокументировано?ПочемуstateMask бытьc_uint64 - не должно быть всегда такого же размера, какstate?Какая структура является истинной для 64-битной?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос