Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VC++代码中的错误\无效\参数和错误\连接\无效_C++_Winapi_Parameters - Fatal编程技术网

VC++代码中的错误\无效\参数和错误\连接\无效

VC++代码中的错误\无效\参数和错误\连接\无效,c++,winapi,parameters,C++,Winapi,Parameters,我已经编写了一个例程,它使用Httpapi.dll中的函数来利用服务器推送 我正在按如下方式传递参数,但调用HttpDeclarePush时得到错误87 error\u INVALID\u参数: 我能够克服前面的错误,但现在我在HttpDeclarePushp\u请求队列\u句柄、请求\u id、动词、http\u路径、查询、标题处得到错误1229 error\u CONNECTION\u INVALID 我已经检查了要推送的JS文件。它在很多地方都有https://localhost/poly

我已经编写了一个例程,它使用Httpapi.dll中的函数来利用服务器推送

我正在按如下方式传递参数,但调用HttpDeclarePush时得到错误87 error\u INVALID\u参数:

我能够克服前面的错误,但现在我在HttpDeclarePushp\u请求队列\u句柄、请求\u id、动词、http\u路径、查询、标题处得到错误1229 error\u CONNECTION\u INVALID

我已经检查了要推送的JS文件。它在很多地方都有https://localhost/polyfills.0d74a55d0dbab6b8c32c.js.

对这个错误有什么帮助吗?我是否需要在HTTP_请求_头*头中提供一些头?我尝试了pHttpContext->GetRequest->GetHeader;,但我认为这不是正确的做法


对不起,我是VC++新手。

必须按如下方式正确创建和传递标题:

HTTP_REQUEST_ID    request_id;
const HTTPAPI_VERSION version = HTTPAPI_VERSION_2;
auto pHttpRequest = p_http_context->GetRequest();
auto phttpRequestRaw = pHttpRequest->GetRawHttpRequest();
request_id = phttpRequestRaw->RequestId;
auto headers = phttpRequestRaw->Headers;

const auto is_success = HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, &headers);
错误\u CONNECTION\u INVALID是由于一个\u HTTP\u HEADER\u ID参数HttpHeaderConnection取“Close”而导致的问题,因此在每次请求响应后连接都会关闭。
因此,底线是,我们必须使参数正确,以解决错误\u无效\u参数。

我发现您的路径存在问题。您需要转义\或者只使用/也不能使用reinterpret_cast将窄字符串文字转换为宽字符串。取消重新解释强制转换并使用L前缀:const auto http_path LD:\\Some_path_From_其中的资源文件将被推送到客户端\\polyfills.0d74a55d0dbab6b8c32c.js;为什么要将HttpCreateRequestQueue的返回值重新解释为void*?也不要这样做,因为返回值不是队列句柄,而是状态码。最后一个参数是实际的队列句柄:handle request\u queue\u handle;ULONG status=HttpCreateRequestQueue…,&request\u queue\u handle;你不会从某个地方得到标题。你自己做的。说出您希望在HTTP请求中使用的头文件。总体而言,您似乎对如何使用API感到困惑。阅读文档以了解API的使用方法,而不是在工作之前尝试。例如,RequestId参数的文档说明请求必须来自指定的队列句柄。来自指定队列的请求是否为句柄?看起来不是这样,因为队列句柄是新创建的,您还没有收到请求。
const auto request_queue_handle = HttpCreateRequestQueue(version, nullptr, nullptr, 0, &p_req_queue_handle);
const auto verb = HttpVerbGET;
const auto http_path = L"/polyfills.0d74a55d0dbab6b8c32c.js";
const auto query = nullptr;

HTTP_REQUEST_HEADERS* headers = nullptr;  //pHttpContext->GetRequest()->GetHeader; //lpOutBuffer;

const auto is_success = HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, headers);
HTTP_REQUEST_ID    request_id;
const HTTPAPI_VERSION version = HTTPAPI_VERSION_2;
auto pHttpRequest = p_http_context->GetRequest();
auto phttpRequestRaw = pHttpRequest->GetRawHttpRequest();
request_id = phttpRequestRaw->RequestId;
auto headers = phttpRequestRaw->Headers;

const auto is_success = HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, &headers);