WinHttpSendRequest返回ERROR_INVALID_PARAMETER

时间:2016-08-22 13:45:08

标签: c winapi

我正在尝试让betfair API使用Windows API。

我试图使用以下代码登录(用户名和密码已更改)。

char *headers = "X-Application: MakJhSABCDq8sbPIr\r\nAccept: application/json";

char *usernameandpassword = "username=mick&password=xyz123";

WinHttpSendRequest(
                    hrequest,
                    (LPCWSTR)headers,
                    -1,
                    usernameandpassword,
                    strlen(usernameandpassword),
                    strlen(usernameandpassword),
                    0);

但调用的返回值为ERROR_INVALID_PARAMETER。但我不知道哪个参数不好。

1 个答案:

答案 0 :(得分:0)

LPCWSTR作为const wchar_t*的typedef。在Windows上,使用UTF-16编码。基本上,您将8位ASCII字符串(headers)输入到16位宽的字符串,并告诉WinHttpSendRequest()计算字符串长度,因为它不是有效的宽字符串而失败。

解决这个问题的方法是首先使用适当的宽字符串:

const wchar_t *headers = L"X-Application: MakJhSABCDq8sbPIr\r\nAccept: application/json";

无论如何,指向带有char*的字符串文字是错误的,因为字符串文字不可修改,修改它们是未定义的行为。它应始终为const