Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

С++ LPVOID PCHAR каково их предназначение?

#cpp


В C++ есть основные типы-данных.

int  string  char  void  DWORD param


Но для чего нужны такие типы данных?

LPARAM LPVOID PCHAR LPCVOID LPDWORD WPARAM


Как они используются?
Каково собственно их предназначение?
    


Ответы

Ответ 1



Начнём с основных типов данных в C++: int string char void DWORD param std::string не является основным типом, а является специализацией шаблона std::basic_string из стандартной библиотеки, который, в свою очередь, не является базовым типом. DWORD не является C++ типом вообще. param, я так полагаю, это Вы по ошибке поставили, так? Кроме этих типов, в C++ есть ещё немало других. Почитайте книгу по C++, много нового узнаете. Что касается других типов: LPARAM LPVOID PCHAR LPCVOID LPDWORD WPARAM Это типы-псевдонимы, т.е. это какие-то базовые типы, которым дали другие имена. К примеру, я могу ввести новое имя для int: typedef int SuperbType; И везде использовать SuperbType вместо int. Для чего это делать? Для удобства — название типов больше соответствуют сфере их применения, а также несут в себя некоторую дополнительную информацию. Так, к примеру, DWORD означает двойное слово, что говорит нам, что этот тип будет всегда равен 4-м байтам. Соответствующий typedef гарантирует нам это как для 32-х битных, так и для 16-и битных систем(WinAPI это старая технология). Посмотреть, что реально скрывается за именами этих типов можно в заголовках WinAPI.

Ответ 2



LPARAM LPVOID PCHAR LPCVOID LPDWORD WPARAM -- это всё псевдонимы стандартных типов, используемых Microsoft в WinAPI. Введены они для того, чтобы их размер всегда соответствовал требуемому (поскольку длина целых типов в C/C++ нефиксирована), а также для улучшения читаемости и понимания (хотя это улучшение ещё большой вопрос...). Так, например, для x86 эти типы имеют следующий вид: typedef long LONG_PTR; typedef void *LPVOID; typedef char *PCHAR; typedef const void *LPCVOID; typedef unsigned long *LPDWORD; typedef unsigned int WPARAM; Более подробно на сайте M$.

Ответ 3



В дополнение к другим ответам: LPARAM и WPARAM обычно используются в контексте WindowProc — оконных процедур. Это такие процедуры, которые «прикреплены» к каждому окну, и обрабатывают сообщения, которые этому окну посылает система (или другие процессы). Например, сообщения о движении мыши или об изменении размеров. Процедура определена так: LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ); и принимает HWND — хэндл окна, UINT-параметр (номер оконного сообщения), и два аргумента, один из которых число (обычно небольшой числовой параметр, какие-нибудь флаги и т. п.), а второй — длинное число (например, пара чисел, координаты) или указатель (на буфер). Точный смысл параметров зависит от типа сообщения. Всё это имеет смысл лишь в WinAPI-программировании (низкоуровневое программирование под Windows Desktop). Современные системы/фреймворки обычно предоставляют вам более высокоуровневые абстракции. (Например, класс CWnd вместе хэндла HWND в MFC.)

Комментариев нет:

Отправить комментарий