在WinAPI函数中使用std::wstring:并非所有文本都已发送

Using std::wstring in WinAPI function: not all text sent

本文关键字:文本 wstring 函数 WinAPI std      更新时间:2023-10-16

当HTTP发布数据时;如果我使用std::wstring作为参数,并不是所有的文本都被发布。但是如果我使用一个标准的TCHAR数组,那么所有的文本都会被发布。为什么会发生这种情况?我如何继续使用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)); 

HttpSendRequest文档中写道:

dwOptionalLength[in]
可选数据的大小,以字节为单位。如果没有要发送的可选数据,则此参数可以为零。

size()返回字符串中的字符元素数,而不是以字节为单位的字符串大小。在Windows上,wchar_t的字节大小是2,所以不是这个:

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

它需要这样:

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