lpcstr c что это

Что такое LPCTSTR?

что такое LPCTSTR и ​​ LPCTSTR (например, HDC ) и что оно обозначает?

Цитировать Брайана Крамера на форумах MSDN

] ‌ong [

] указатель на [

] stonst [

] ‌CHAR [

] ‌ing (Не волнуйтесь, длинный указатель такой же, как указатель. Под 16-битными окнами было два вида указателей.)

Нет необходимости использовать какие-либо типы, относящиеся к TCHAR.

Если вы не нацелены на Windows 9x, в которой отсутствовали реализации многих функций Юникода, нет необходимости использовать версии ANSI. Если вы ориентируетесь на Windows 9x, вы можете использовать TCHAR для создания бинарных файлов ANSI и Unicode из одной и той же кодовой базы, если ваш код не делает предположений о том, является ли TCHAR символом или wchar.

Если вас не волнует Windows 9x, я рекомендую настроить ваш проект как Unicode и рассматривать TCHAR как идентичный WCHAR. Вы можете явно использовать функции и типы W, если хотите, но если вы не планируете запускать свой проект в Windows 9x, это не имеет значения.

Эти типы описаны в Типы данных Windows на MSDN:

Этот тип объявлен в WinNT.h следующим образом:

Указатель на постоянную строку с нулевым символом в конце, состоящую из 16-битных символов Юникода. Для получения дополнительной информации см. Наборы символов, используемые шрифтами.

Этот тип объявлен в WinNT.h следующим образом:

Этот тип объявлен в WinDef.h следующим образом:

Я знаю, что этот вопрос задавался довольно давно, и я не пытаюсь прямо ответить на точный оригинальный вопрос, но, поскольку этот конкретный вопрос/ответ имеет достойную оценку, я хотел бы добавить сюда немного для будущих читателей. Это более конкретно связано с _ Win32 _ API typedefs и ​​с тем, как их понять.

Читайте также:  bluebird bio акции чем занимается

Если кто-то когда-либо занимался программированием Windows в эпоху 32-битных машин от Windows 95 до Windows 7-8 и выше, они понимают и знают, что _ Win32 _ API загружен typedefs и ​​что большинство их функций и структур, которые должны быть заполнены и использованы, в значительной степени зависят от них.

Вот базовая программа для Windows, которую можно продемонстрировать в качестве демонстрации.

Давайте разберемся с этим, посмотрев на функции WinMain и ​​ InitWindowsApp : в первую очередь это параметры функций HINSTANCE и ​​ PSTR :

Первый HINSTANCE определяется как [

] и как [

] указатель на [

Дескриптор объекта. Этот тип объявлен в WinNT.h следующим образом:

Указатель на любой тип. Это объявлено в WinNT.h

Источник

LPCSTR, LPCTSTR и LPTSTR

почему нам нужно это сделать, чтобы преобразовать строку в LV / _ITEM структура переменной pszText :

5 ответов

чтобы ответить на первую часть вашего вопроса:

LPCSTR это строка const

LPCTSTR это const TCHAR строку ( TCHAR будучи либо широким символом, либо символом в зависимости от того, определен ли UNICODE в вашем проекте)

LPTSTR является (non-const) TCHAR строка

это большая статьи codeproject описание строк C++ (см. 2/3 пути вниз для диаграммы, сравнивающей различные типы)

LP ==LОнг Pointer. Просто подумайте указатель или char*

C = Const, в этом случае я думаю, что они имеют в виду, что символьная строка является const, а не указатель const.

STR и строка

на T для широкого символа или char (TCHAR) в зависимости от параметров компиляции.

8-битные AnsiStrings

16-бит UnicodeStrings

в зависимости от UNICODE определить

Бонус Чтение

добавление к ответу Джона и Тима.

Если вы не кодируете для Win98, есть только два из 6 + строковых типов, которые вы должны использовать в своем приложении

Читайте также:  какой номер статьи за угрозу

остальные предназначены для поддержки платформ ANSI или двойных компиляций. Сегодня они уже не так актуальны, как раньше.

чтобы ответить на вторую часть вашего вопроса, вам нужно сделать такие вещи, как

1) преобразование string (a CString на догадку) в LPCTSTR (что на практике означает получение адреса его символьного буфера в качестве указателя только для чтения)

99% времени это будет ненужным и лечить LPCTSTR как LPTSTR будет работать. но однажды, когда ты меньше всего этого ожидаешь.

Источник

Конвертация LPSTR, LPCSTR, LPWSTR в обычный String

9 ответов

LPSTR lpVar = «something»;
string str = lpVar;
LPWSTR wlpVar = L»something»;
wstring wstr = wlpVar;

LPSTR это char*
LPCSTR это const char*
LPWSTR это wchar_t*

это типы данных для WinApi и сделанно это изза того что у каждого языка спецификация типов данных своеобразна а функции WinApi одни. поетому для совместимости языка и WinApi переопределяются только типы

Работать с адскими типами лучше всего через

—//—
MessageBox(NULL,_T(«Release Of DC And RC Failed.»),
_T(«SHUTDOWN ERROR»),MB_OK | MB_ICONINFORMATION);

LPSTR lpVar = «something»;
string str = lpVar;
LPWSTR wlpVar = L»something»;
wstring wstr = wlpVar;

LPSTR это char*
LPCSTR это const char*
LPWSTR это wchar_t*

это типы данных для WinApi и сделанно это изза того что у каждого языка спецификация типов данных своеобразна а функции WinApi одни. поетому для совместимости языка и WinApi переопределяются только типы

Софсем забыл сказать, что пишу на VC++ 2005 и такие вещи чет не прокатывают 🙁

А так, как я показал, через макросы? тоже не катит?

Описание:
function wvsprinf(Output, Format, ArgList: PChar): Integer;

Фоpматиpует и записывает в буфеp последовательность символов.

Паpаметpы:
Output: Буфеp для пpиема отфоpматиpованных символов.
Format: Стpока упpавления фоpматом.
ArgList: Массив аpгументов для стpоки упpавления фоpматом.

Читайте также:  при окончании школы какое образование получаешь

Чем плох?В Format можно вставить все што угодно,а аутпут будет char.

Источник

Сказочный портал