Каковы определения для LPARAM и WPARAM?

Я знаю, что я ленив здесь, и я должен тралить заголовочные файлы для меня, но каковы фактические типы для LPARAM и параметров WPARAM? Они - указатели, или четыре байта ints? Я делаю некоторый код C# interop и хочу быть уверенным, что я получаю его работающий над x64 системами.

57
задан user314104 15 February 2012 в 02:30
поделиться

5 ответов

LPARAM - это определение типа для LONG_PTR , которое является длинным (32-разрядным со знаком) в win32 и __ int64 (64-разрядным со знаком) на x86_64.

WPARAM - это typedef для UINT_PTR , который представляет собой unsigned int (32-битное без знака) в win32 и unsigned __int64 (беззнаковый 64- бит) на x86_64.

Ссылка MSDN

82
ответ дан 24 November 2019 в 19:23
поделиться

LPARAM относится к LONG_PTR, а WPARAM относится к UINT_PTR

На x86 они будут иметь размер 4 байта, а на x64 - 8 байтов.

5
ответ дан 24 November 2019 в 19:23
поделиться

Здесь:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
4
ответ дан 24 November 2019 в 19:23
поделиться

Что тебе нужно, мой друг, это http://www.pinvoke.net/

4
ответ дан 24 November 2019 в 19:23
поделиться

Эти определения типов восходят к 16-битным временам. Первоначально LPARAM был длинным (32-битным со знаком), а WPARAM был WORD (16-битный без знака), следовательно, W и L . Из-за общей практики передачи приведенных указателей в качестве параметров сообщения, WPARAM был расширен до 32 бит в Win32, а LPARAM и WPARAM были расширены до 64 бит. на Win64.

В C # следует использовать IntPtr для LPARAM и UIntPtr для WPARAM.

Обратите внимание, что, несмотря на префикс LP , LPARAM не является дальним указателем на ARAM .

55
ответ дан 24 November 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: