我試圖做到這一點,但我沒有找到任何方法。我問這是因爲我對windows很陌生。我試過stl-strings,但visual studio 2008-在stl-wstring-handling中累積了一些bug。稍後我會在其他問題上談論這件事。現在任何人都可以解釋這個問題嗎?vC++ - 如何將CString轉換爲LPCWSTR
回答
這應該這樣做,假設你的應用程序尚未設置爲Unicode(如果是,就直接投):
CString str("Hello, world!");
CStringW strw(str);
LPCWSTR ptr = strw;
如果你有那麼定義UNICODE,_UNICODE
編譯器標誌一個簡單的任務應該工作。如果您有_MBCS
定義您需要使用MultiByteToWideChar方法。
在MFC中過於複雜。按照建議更好地使用CStringW,或者使用合適的Cx2y類。 – 2011-03-11 11:47:33
'CString'有轉換c'tors。如果您需要ANSI編碼字符串中的寬字符串,只需執行'CStringW wideString(narrowString);',其中'narrowString'類型爲'CStringA'。 – IInspectable 2016-06-03 13:14:31
您也可以使用T2W()宏來避免寫幾行MultiByteToWideChar代碼。
更好地使用Cx2y類而不是舊的T宏。 – 2011-03-11 11:46:17
使用像這樣的轉換類CT2CW FuncTakingLPCWSTR(CT2CW(cstring_var))
。這可以保證在Unicode或MBCS版本中工作。
另外,請記住,傳遞給該函數的字符串可能是臨時的,因此請勿將其存儲以供以後使用。
參考:http://msdn.microsoft.com/en-us/library/87zae4a3%28VS.80%29.aspx – Inverse 2011-03-11 17:43:26
最簡單的方法是使用MFC字符串轉換宏,在限定的:
http://msdn.microsoft.com/en-us/library/87zae4a3%28VS.80%29.aspx
例如,宏轉換CString
到LPCWSTR
是CT2W(s)
。
另一種方法是使用專門的CStringA
和CStringW
類。這些是相應的ASCII和寬版本CString
,具體取決於您是否使用UNICODE
標誌進行編譯。所以你可以使用:
CString your_string = "blah"
CStringW wide_string = your_string;
得到一個廣泛的字符串版本。
LPCWSTR pstr;
CString cstrTemp;
...
pstr = cstrTemp.AllocSysString();
AllocSysString將返回一個BSTR類型的字符串,它可以直接轉換爲LPCWSTR。
「BSTR」不能轉換爲「LPCWSTR」。這兩種字符串類型都有不同的語義。例如,'nullptr'總是一個有效的'BSTR'。 'LPCWSTR'不作任何保證。另外,需要清理一個'BSTR'來調用'SysFreeString'。你的代碼沒有顯示這一點,你的解釋也沒有注意到這一點。由於OP要求** const **指針,因此他們甚至不需要副本。在這種情況下,內置的'運算符LPCTSTR()'已經足夠了。而且,除非你需要一個'BSTR',否則不要只使用一個,因爲你不知道還有什麼要做。對不起,-1。 – IInspectable 2016-06-03 13:11:02
- 1. UCHAR *到CString轉換和CString到UCHAR *轉換爲vC++
- 2. BSTR轉換爲CString的CString
- 3. 將v8 :: String轉換爲LPCWSTR?
- 4. 如何將cstring轉換爲NSString和NSString爲cstring?
- 5. 如何將一個void *轉換爲CString
- 6. 如何將CString轉換爲字節?
- 7. 如何將CString轉換爲CTime在c + +?
- 8. 如何將nsstring轉換爲cString?
- 9. 如何將CString轉換爲const char *?
- 10. 如何將CString轉換爲CByteArray?
- 11. 如何將LPARAM lParam轉換爲CString
- 12. 如何將CString轉換爲VT_ARRAY | VT_UI1
- 13. 如何將Int轉換爲CString?
- 14. MFC - 如何將WCHAR轉換爲CString?
- 15. 如何將CString轉換爲ofstream?
- 16. 如何將CString轉換爲UCHAR數組?
- 17. 如何將cstring轉換爲NSString?
- 18. 如何將_bstr_t轉換爲CString
- 19. 在MFC(VC++)中將CString轉換爲枚舉類型?
- 20. Int轉換爲LPCWSTR
- 21. 將long double轉換爲CString
- 22. 將寬CString轉換爲char *
- 23. 將Wstring轉換爲CString
- 24. 將COleVariant轉換爲CString
- 25. 將CString轉換爲std :: wstring
- 26. 從LPCWSTR轉換爲LPCSTR
- 27. 如何轉換LPCWSTR和char?
- 28. 如何轉換長LPCWSTR?
- 29. 如何將VC++代碼轉換爲C#?
- 30. 將QString轉換爲LPCWSTR qt C++
這麼多令人費解的(而且是錯誤的)答案,以及在MFC中通過轉換c'tors完成此操作的唯一正確方法是沒有得到任何upvotes? – IInspectable 2016-06-03 13:17:30