2016-07-26 74 views
0

當HTTP發佈數據;如果我使用std::wstring作爲參數,則不會發布所有文本。但是如果我使用標準的TCHAR數組,那麼所有的文本都會被髮布。爲什麼會發生這種情況,我如何繼續使用std::wstring在WinAPI函數中使用std :: wstring:並非所有文本都發送

// wont compile unless cast to LPVOID and not all data is sent. 
HttpSendRequest(hRequest, hdrs, -1, (LPVOID)fData.c_str(), fData.size()); 

// successfully sends all fData text 
TCHAR s[1024] = {0}; 
_tcscpy(s, fData.c_str()); 
HttpSendRequest(hRequest, hdrs, -1, s, sizeof(s)); 
+1

「不會編譯除非投地LPVOID」告訴你,你錯了類型。 –

+0

@ Cheersandhth.-Alf函數4th參數需要'LPVOID',即void指針。一個void指針可以是任何類型。 –

+0

'HttpSendRequest'應該使用'fData.size()* 2',如果是'std :: wstring' –

回答

1

HttpSendRequest文檔說:

dwOptionalLength [IN]
可選數據的大小,在字節。如果沒有可選數據要發送,此參數可以爲零。

size()返回字符串中字符元素的數量,而不是以字節爲單位的字符串的大小。一個wchar_t的Windows上的字節大小爲2,所以不是這樣的:

HttpSendRequest(hRequest, hdrs, -1, (LPVOID)fData.c_str(), fData.size()); 

它必須是這樣的:

HttpSendRequest(hRequest, hdrs, -1, (LPVOID)fData.c_str(), fData.size() * sizeof(wchar_t)); 
+4

我相信這對你有用,但'TCHAR'和'std :: wstring'之間或者'fData'應該是沒有關係的。 –

+0

我修復了答案。這裏沒有'TCHAR'的地方。 –

相關問題