2016-07-26 40 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'的地方。 –

相关问题