2014-02-05 121 views
6

我將Windows庫轉換爲Linux。我需要在Linux中找到LPTSTR和LPCSTR。什麼是Linux相當於LPTSTR和LPCSTR?

我知道我可以使用wchar_t可以使用,但我不確定如何使用它。

使用LPTSTR是如下方法之一:

void ErrorExit(LPTSTR zFunction) 
{ 
} 

任何幫助將不勝感激!

+1

如果你在C中工作,你將得到wchar_t的編譯錯誤。它將使用C++而不是Windows上的wchar_t是2個字節;在Linux上它是4個字節。 – cup

+0

@cup從C中刪除'wchar_t'的時候?據我所知,它存在於C中。 – glglgl

+0

@glglgl:我不知道它是否從C中移除。它不適用於gcc 4.7.2中的C程序。適用於Windows。 – cup

回答

7

在Linux中,對於庫API函數,通常不使用wchar_t。大多數庫使用UTF-8編碼的字符串,所以它們將字符串作爲NUL終止字符的簡單數組(IMO遠遠優於用ANSI和Unicode版本複製所有函數)。

因此,考慮到這一點:

  • LPCTSTRLPCSTRLPCWSTR - >const char *
  • LPTSTR,LPSTR,LPWSTRchar *

如果您在使用Unicode功能,MS風格的堅持,你必須要知道,他們實際使用UTF-16編碼字符串,wchar_t不是便攜式類型,不是由語言指定其大小。相反,你可以使用uint16_t

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

如果你想成爲額外的MS兼容,可以使用UNICODE宏有條件的typedef的LPTSTRLPTCSTR到別人的一個,但是這可能對您的問題不需要的。

+0

IBTD。大多數庫只使用普通字符串。它們是以UTF-8編碼還是以latin1編碼,或者以任何語言環境設置爲準。如果您需要轉換,可以使用['mbtowc()'](http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/2461____.HTM) – glglgl

+0

@glglgl :嗯,最後的部分是可以理解的。但是,大多數現代Linux發行版默認使用UTF-8語言環境(很少有理由改變它),而使用UTF-8(無論配置的語言環境如何),使用幾個高級庫(請參閱GTK,Qt,Pango,Cairo ...) 。 – rodrigo

+0

@rodrigo謝謝!我做完! +1 –

3

LPTSTR - 長指針,TCHAR字符串(不要擔心,一個長指針相同的指針。)

LPCSTR - 龍指向一個常量字符串

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

相關問題