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



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

694   5  

5 ответов:

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 link

эти 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.

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

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

здесь:

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;

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

Comments

    Ничего не найдено.