c++11 - 将全局变量成员的指针发送到 WinHttpQueryHeaders (WinHTTP API) 不会改变它的值
问题描述
我有以下代码片段:
// Using HttpQueryInfo to obtain the size of the buffer into dwSize.
if (!WinHttpQueryHeaders(hRequest,
WINHTTP_QUERY_RAW_HEADERS_CRLF,
WINHTTP_HEADER_NAME_BY_INDEX, NULL, &st.dwSize, WINHTTP_NO_HEADER_INDEX))
{
// An ERROR_INSUFFICIENT_BUFFER is expected because you
// are looking for the size of the headers. If any other
// error is encountered, display error information.
DWORD dwErr = GetLastError();
if (dwErr != ERROR_INSUFFICIENT_BUFFER)
{
DEBUG_PRINT(("Error %d encountered.", dwErr));
return;
} else {
// enters here and prints '0' (initial value)
DEBUG_PRINT(("size of buffer: ", &st.dwSize));
}
}
whilest
是一个带有成员的全局对象dwSize
。
当我在调试模式下运行这部分时,我看到st.dwSize
在调用WinHttpQueryHeaders
.
但是,如果我创建一个本地 varDWORD dwSize = 0
并发&dwSize
送到WinHttpQueryHeaders
,它会获得缓冲区大小并成功更改其值。
有什么理由不应该将全局对象成员的指针发送到WinHttpQueryHeaders
或发送到任何其他外部 API 函数?
解决方案
WinHttpQueryHeaders
没有成功改变它的原因st.dwSize
是因为我st
作为一个static
全局变量。
static WinHttpSubtransport st;
静态全局变量是一个全局变量,它只能被与该变量位于同一 C 程序文件中的函数访问。
推荐阅读
- web-scraping - 如何获取 youtube 视频 ID
- excel - Excel PDF 导出 - 在新选项卡中打开超链接
- asynchronous - 为什么在 main 函数完成后 Future 工作?
- git - 在 Github 上写完代码可以在线运行吗?
- python - 当只传递网络的输入和输出时,keras 功能 API 模型如何知道层
- python - 在 Django 中使用嵌套序列化程序创建 2 个相关模型的实例
- git - 从另一个分支创建的变基分支
- c# - Net core 3.1 mvc 应用程序部署为 Windows 服务
- java - Java Concurrent Hashmap initTable() 为什么 try/finally 阻塞?
- wordpress - 我的 WordPress 缩略图比原始缩略图大得多(以字节为单位)