Каковы определения для LPARAM и WPARAM? - PullRequest
56 голосов
/ 25 марта 2010

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

Ответы [ 5 ]

81 голосов
/ 25 марта 2010

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

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

MSDN-ссылка

54 голосов
/ 30 июня 2010

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

В C #,вы должны использовать IntPtr для LPARAM и UIntPtr для WPARAM.

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

5 голосов
/ 25 марта 2010

LPARAM ссылается на LONG_PTR, а WPARAM ссылается на UINT_PTR

На x86 они будут 4 байта, а на x64 они будут 8 байтов.

4 голосов
/ 25 марта 2010

Здесь:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
3 голосов
/ 25 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...