LVITEM para Windows 64 bit

Durante mucho tiempo intenté usar elLVM_GETITEMW mensaje conLVIF_TEXT máscara para obtener el texto de un ListView. Mi programa funcionó en 32 bits pero no en arquitectura de 64 bits.

Descubrí que el problema estaba en elLVITEM estructura En breve, mi pregunta es qué estructura es la adecuada para 64 bits y por qué.

La estructura que utilicé comoLVITEMW struct tenía los siguientes campos:

('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)

(Escrito con python 2.7 ctypes, pero esto es solo una forma de escritura, el lenguaje es realmente irrelevante).

Estos campos son tandocumentado.

Después de mucho googlear, encontré estoforo que tenía exactamente lo que necesitaba: ¡la solución de 64 bits!

Entonces, en 64 bits, la estructura debería tener más "espacios", y debería verse más o menos así (los punteros ahora son de 64 bits y también elstateMask es de 64 bits Eso es un poco diferente de lo que sugirió el foro, pero también funciona):

('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)

El foro sugirió tener:

('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

Lo que también funciona, en una lista para mi necesidad, que es el texto señalado por pszText.

Y mis preguntas son:

¿Está documentado en alguna parte?¿Por qué debería elstateMask serc_uint64 - ¿No debería ser siempre del mismo tamaño que elstate?¿Cuál es la verdadera estructura para 64 bits?

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta