2014-02-05 10 views
6

Ich konvertiere Windows-Bibliothek zu Linux. Ich muss LPTSTR und LPCSTR in Linux finden.Was ist Linux-Äquivalent von LPTSTR & LPCSTR?

Ich werde wissen, dass ich wchar_t verwenden kann, aber ich bin nicht wirklich sicher über die Verwendung.

eines der Verfahren, die verwendet LPTSTR ist wie folgt:

void ErrorExit(LPTSTR zFunction) 
{ 
} 

Jede mögliche Hilfe geschätzt wird!

+1

Wenn Sie in C arbeiten, erhalten Sie Kompilierungsfehler mit wchar_t. Es funktioniert mit C++, aber nicht unter Windows wchar_t ist 2 Bytes; Unter Linux sind es 4 Bytes. – cup

+0

@cup Wann wurde 'wchar_t' von C entfernt? Soweit ich weiß, existiert es in C. – glglgl

+0

@glglgl: Ich weiß nicht, ob es von C entfernt wurde. Es funktioniert nicht auf C-Programmen in gcc 4.7.2. Funktioniert unter Windows. – cup

Antwort

7

In Linux verwenden Sie normalerweise nicht wchar_t für Bibliothek API-Funktionen. Die meisten Bibliotheken verwenden UTF-8-codierte Strings, also nehmen sie als Strings einfache Arrays von NUL-terminierten Zeichen (IMO, die weit besser sind als das Duplizieren aller Funktionen mit ANSI- und Unicode-Versionen).

Also, in diesem Sinne:

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

Wenn Sie sich mit dem Unicode-Funktionen bestehen, MS Stil, müssen Sie sich bewusst sein, dass sie tatsächlich UTF-16 codierten Zeichenfolge verwenden, und wchar_t ist keine tragbare Art, wie seine Größe nicht durch die Sprache angegeben wird. Stattdessen können Sie uint16_t verwenden:

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

Und wenn Sie wollen zusätzliche MS kompatibel sein, können Sie die UNICODE Makro bedingt typedef die LPTSTR und LPTCSTR in einer der anderen verwenden, aber das ist wahrscheinlich nicht benötigt für Ihr Problem.

+0

IBTD. Die meisten Bibliotheken verwenden nur einfache Zeichenfolgen.Ob sie in UTF-8 oder in Latin1 oder in den Gebietsschemaeinstellungen codiert sind. Wenn Sie konvertieren müssen, können Sie ['mbtowc()' et al.] (Http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/2461____.HTM) – glglgl

+0

@glglgl : Nun, der kleinste Teil ist wohl. Aber _most_ moderne Linux-Distributionen verwenden UTF-8-Ländereinstellung standardmäßig (und wenig Grund, es zu ändern), und _quite ein paar_ High-Level-Bibliotheken (siehe GTK, Qt, Pango, Cairo ...) verwenden UTF-8 unabhängig von der konfigurierten Ländereinstellung . – rodrigo

+0

@rodrigo danke! Ich bin fertig! +1 –

3

LPTSTR - Langer Zeiger auf TCHAR STRing (Keine Sorge, ein langer Zeiger die gleiche wie ein Zeiger ist.)

LPCSTR - Langer Zeiger auf ein Konst STRing

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

Vielen Dank für Ihre Mühe +1 –

+0

erklären das Akronym allein berechtigt die +1 – yair