2014-02-05 5 views
6

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

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

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

void ErrorExit(LPTSTR zFunction) 
{ 
} 

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

+1

Если вы работаете на C, вы получите ошибки компиляции с помощью wchar_t. Он будет работать с C++, но не на Windows wchar_t - 2 байта; на Linux это 4 байта. – cup

+0

@cup Когда был 'wchar_t' удален из C? Насколько я знаю, он существует в C. – glglgl

+0

@glglgl: Я не знаю, было ли оно удалено из C. Оно не работает на C-программах в gcc 4.7.2. Работает в Windows. – cup

ответ

7

В Linux вы обычно не используете wchar_t для функций API библиотеки. Большинство библиотек используют кодированные строки UTF-8, поэтому они принимают в качестве строк простые массивы символов с нулевым завершением (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 в одну из других, но это, вероятно, не нужно для вашей проблемы.

+0

IBTD. Большинство библиотек используют простые строки.Независимо от того, закодированы ли они в UTF-8 или на латинском языке1 или в том, что зависит от настроек локали. Если вам нужно преобразовать, вы можете взять ['mbtowc()' и др.] (Http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/2461____.HTM) – glglgl

+0

@glglgl : Ну, самая большая часть, возможно. Но в современных дистрибутивах Linux по умолчанию используется локаль UTF-8 (и мало причин для ее изменения), и _quite несколько библиотек высокого уровня (см. GTK, Qt, Pango, Cairo ...) используют UTF-8, независимо от настроенного языка , – rodrigo

+0

@rodrigo спасибо! Я все! +1 –

3

LPTSTR - Long Указатель на TCHAR струна (Не волнуйтесь, длинный указатель такой же, как указатель.)

LPCSTR - Длинный указатель на Const Струнные

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 

from msn page LPCSTR

typedef const char* LPCSTR; 

from msn page LPTSTR =>

#ifdef UNICODE 
typedef LPWSTR LPTSTR; 
#else 
typedef LPSTR LPTSTR; 
#endif 
+0

Спасибо за ваше усилие +1 –

+0

, объясняющее только аббревиатуру, оправдывает +1 – yair

 Смежные вопросы

  • Нет связанных вопросов^_^