Каковы определения для LPARAM и WPARAM?
Я знаю, что я ленив здесь, и я должен тралить заголовочные файлы для себя, но каковы фактические типы для параметров LPARAM и WPARAM? Это указатели или четырехбайтовые ints? Я делаю код взаимодействия C# и хочу быть уверенным, что он работает на системах x64.
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.
эти 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 байт.
Что вам нужно, мой друг http://www.pinvoke.net/
Comments