Я знаю, что я ленив здесь, и я должен тралить заголовочные файлы для меня, но каковы фактические типы для LPARAM и параметров WPARAM? Они - указатели, или четыре байта ints? Я делаю некоторый код C# interop и хочу быть уверенным, что я получаю его работающий над x64 системами.
LPARAM
- это определение типа для LONG_PTR
, которое является длинным
(32-разрядным со знаком) в win32 и __ int64
(64-разрядным со знаком) на x86_64.
WPARAM
- это typedef для UINT_PTR
, который представляет собой unsigned int
(32-битное без знака) в win32 и unsigned __int64
(беззнаковый 64- бит) на x86_64.
LPARAM относится к LONG_PTR, а WPARAM относится к UINT_PTR
На x86 они будут иметь размер 4 байта, а на x64 - 8 байтов.
Что тебе нужно, мой друг, это http://www.pinvoke.net/
Эти определения типов восходят к 16-битным временам. Первоначально LPARAM
был длинным
(32-битным со знаком), а WPARAM
был WORD
(16-битный без знака), следовательно, W и L . Из-за общей практики передачи приведенных указателей в качестве параметров сообщения, WPARAM
был расширен до 32 бит в Win32, а LPARAM
и WPARAM
были расширены до 64 бит. на Win64.
В C # следует использовать IntPtr
для LPARAM
и UIntPtr
для WPARAM.
Обратите внимание, что, несмотря на префикс LP
, LPARAM
не является дальним указателем на ARAM
.