2015-06-13 48 views
0
string pagexx = "http://website.com/" + chatname; 
string pathxx = "test"; 
HRESULT resxx = URLDownloadToFile (NULL, _T(pagexx.c_str()),_T(pathxx.c_str()), 0, NULL); 

錯誤是「錯誤:標識符」Lpagexx「未定義。」 和相同的路徑xxx我可以在變量中使用_T()宏嗎?

我不能只輸入像_T("nice")這樣的字符串,因爲我特別需要它的聊天名稱。我該如何做這項工作?

+0

試試'wstring'。或者查看寬字符字符串vs普通字符串。或者在編譯器設置中關閉Unicode。 –

+2

你的下一個問題我建議你創建一個最小的,完整的和可驗證的例子(在這裏解釋:http://stackoverflow.com/help/mcve)讓人們可以幫助你解決你的問題 – xmoex

回答

0

_T只是一個帶有前綴的宏,其參數爲L(如果使用unicode編譯)。變量必須使用wchar_t(或wstring和simmilar)

假設chatnamewstring類型的聲明。

wstring pagexx = L"http://website.com/" + chatname; 
wstring pathxx = L"test"; 
HRESULT resxx = URLDownloadToFile (NULL, pagexx.c_str(), pathxx.c_str(), 0, NULL); 

或者更好(因爲你是微軟下編譯的東西,你可以用更一般的宏,這樣就可以帶或不帶UNICODE被設置編譯相同的代碼)。

_tstring pagexx = _T("http://website.com/") + chatname; 
_tstring pathxx = _T("test"); 
HRESULT resxx = URLDownloadToFile (NULL, pagexx.c_str(), pathxx.c_str(), 0, NULL); 
+0

_tstring is undefined,ahh im這樣的noob。 :( – user3883278

+0

好的,關掉Unicode幫助我。謝謝 – user3883278

+0

你的第一個例子不會編譯,除非你在字符串前加一個'L'。你的第二個例子需要一個圍繞字符串的'_T()'包裝。 – Ferruccio

1

如果字符串僅包含非Unicode那麼你的最簡單的解決方法是:

HRESULT resxx = URLDownloadToFileA (NULL, pagexx.c_str(), pathxx.c_str(), 0, NULL); 

_T東西已經過時了十年,至少,沒有理由在所有的打擾針對兩種不同版本的Windows API編譯應用程序的複雜性。

如果您的std::string包含UTF-8,那麼您將需要將它們轉換爲UTF-16,然後致電URLDownloadToFileW

相關問題