2014-03-13 43 views
-2

我有功能寫有參數LPCTSTR winapi函數的路徑CreateFile。如何將char[]轉換爲LPCTSTR並將其傳遞給func? P.S.我「已經看到其他的主題,並沒有什麼有用的如何將char []轉換爲LPCTSTR?

+1

我建議使用這些版本的廣泛版本,而不是'T *'版本,除非您打算支持極其舊版本的Windows。 – chris

+0

[http://social.msdn.microsoft.com/Forums/vstudio/en-US/b073d1cb-cb16-4956-b3ef-9021265f8efe/convert-char-to-lpctstr]? – Jayce

回答

3

LPCTSTR是宏const TCHAR*TCHAR要麼是取決於是否UNICODE(在舊版本的Visual c unsigned short ++)charwchar_t定義。你有幾個選項:

  1. 使用的TCHAR[]代替char[]您可以使用TEXTT宏做到這一點,對於字符串字面量

  2. 取消定義UNICODE並構建您的項目時不支持寬字符。 (相反,您可以將其定義並使用寬字符集而不是ANSI)。

  3. 執行從單個字節到多字節字符集的轉換。你可以找到更多關於字符集和轉換函數的信息here

A中提出的選項是使用CreateFileW(或CreateFileA取決於你的慾望)而不是CreateFile(將映射到任何一個取決於UNICODE預處理器標誌前面提到的函數)。

+2

它是'char'或'wchar_t' –

+0

爲什麼你會在新代碼中使用TCHAR等? –

+0

@DavidHeffernan而'wchar_t'是'unsigned short'的一個typedef(儘管如果內存服務的話,他們在C++ 11中將它添加爲一個原始類型 - [他們確實](http://msdn.microsoft.com /en-us/library/dh8che7s.aspx))。 –

2

請致電CreateFileA(明確要求窄字符版本),並直接將char []直接傳遞給它,不需要強制轉換。

+0

它的工作原理!謝謝! – prozac631

+2

@prozac現在你的程序被困在ANSI字符集中。你爲什麼想要對自己施加這種衝擊。我們其他人花了數年的時間學習藐視ANSI。這是2014年。世界上不是每個人都會說英語。 –

+0

@David這個選擇已經通過'char'完成。 (好吧,它可能是UTF8,但Windows會讓你非常痛苦。) –