【发布时间】:2014-05-27 14:54:36
【问题描述】:
winapi函数WinHttpSendRequest()想要第二个参数的大小在第三个,第四个参数的大小在第五个。
怎么计算?
我有一个围绕它的函数,我直接传递字符串,大约是这样的:
void Req(LPCWSTR headers, LPVOID body) {
WinHttpSendRequest( hRequest, headers, (DWORD)strlen(headers), body, (DWORD)strlen(body), 0, 0 );
}
Req(L"User-Agent: blabla/1.0\r\nConnection: Keep Alive", "asdf=qwer&abcd=1234);
上面的代码不起作用。 :/
我希望你能帮助我。
【问题讨论】:
-
strlen用于窄字符串,而不是宽字符串。void *没有长度可以获取。我建议为第二个参数使用一个实际的字符串,如果需要,它将隐式转换为const void *。 -
如何将其转换为 const void *?
-
如果您采用非常量字符串,它将自动执行此操作,否则它将转换为
const void *。由于该函数采用非常量,因此假设它不修改它是不安全的,并且修改字符串文字之类的东西非常糟糕。您始终可以获取一个 const 字符串并从中形成一个非常量字符串。并且可能使用实际的 C++ 字符串,这些字符串在您的函数中使用起来更加自然。 -
请不要使用
TCHAR之类的,它们仅用于移植古老的Windows程序。对于任何通信应用程序,请考虑使用UTF-8 everywhere。 -
我现在厌倦了这个:pastebin.com/LkZBJkA0 但即使 (DWORD)strlen(body) 似乎返回了正确的大小,我得到一个“无效参数”错误:msdn.microsoft.com/en-us/library/windows/desktop/…
标签: c++ string-length lpcwstr