Что такое Linux-эквивалент LPTSTR и LPCSTR?

Я конвертирую библиотеку Windows в Linux. Мне нужно найти LPTSTR и LPCSTR в Linux.

Я узнаю, что я могу использовать wchar_t, но я не совсем уверен в его использовании.

Один из методов, который использует LPTSTR, выглядит следующим образом:

void ErrorExit(LPTSTR zFunction)
{
}

Любая помощь будет оценена!

2 ответа

Решение

В Linux вы обычно не используете wchar_t для функций библиотеки API. Большинство библиотек используют строки в кодировке UTF-8, поэтому они принимают в качестве строк простые массивы символов с NUL-символами (IMO, что намного лучше, чем дублирование всех функций в версиях ANSI и Unicode).

Итак, имея это в виду:

  • LPCTSTR, LPCSTR, LPCWSTR -> const char *,
  • LPTSTR, LPSTR, LPWSTR -> char *,

Если вы настаиваете на использовании функций Unicode в стиле MS, вы должны знать, что они действительно используют строки в кодировке UTF-16, и wchar_t не является переносимым типом, так как его размер не указан языком. Вместо этого вы можете использовать uint16_t:

  • LPCWSTR -> const uint16_t *,
  • LPWSTR -> uint16_t *,

И если вы хотите быть более совместимым с MS, вы можете использовать UNICODE макрос для условного определения типа LPTSTR а также LPTCSTR в один из других, но это, вероятно, не нужно для вашей проблемы.

LPTSTR - L‌ong P‌ointer to T‌CHAR STR‌ing (не беспокойтесь, длинный указатель такой же, как указатель.)

LPCSTR - L‌ong P‌ointer to C‌onst STR‌ing

LPSTR = char*
LPCSTR = const char*
LPWSTR = wchar_t*
LPCWSTR = const wchar_t*
LPTSTR = char* or wchar_t* depending on _UNICODE
LPCTSTR = const char* or const wchar_t* depending on _UNICODE

со страницы MSN LPCSTR

typedef const char* LPCSTR;

со страницы MSN LPTSTR=>

#ifdef UNICODE
 typedef LPWSTR LPTSTR;
#else
 typedef LPSTR LPTSTR;
#endif
Другие вопросы по тегам