gpt4 book ai didi

c++ - 使用 ICU_REJECT_USERPWD 标志集调用 WinHttpCreateUrl 在 Windows 7 中工作,但在 Windows XP 中不工作(使用虚拟 PC)

转载 作者:行者123 更新时间:2023-11-28 08:18:55 25 4
gpt4 key购买 nike

在运行我在 Windows XP(在 Windows 7 的 Virtual PC 下)中开发的应用程序时,我遇到了意外错误。我在 Windows 7 64 位专业版中使用 Visual Studio 2010 编译它。

我已经将问题追踪到在 XP 下没有正确创建 URL。下面是我放在一起的一个小测试床来展示这个-

URL_COMPONENTS components;
memset( &components, 0, sizeof( URL_COMPONENTS ));
components.dwStructSize = sizeof( URL_COMPONENTS );
components.lpszScheme = L"http";
components.dwSchemeLength = 4;
components.lpszHostName = L"google.com";
components.dwHostNameLength = 10;
components.nScheme = INTERNET_SCHEME_HTTP;
components.nPort = 80;
DWORD len = 0;
DWORD flags = ICU_REJECT_USERPWD;
if( !WinHttpCreateUrl( &components, flags, NULL, &len )) {
WChar buf[256];
wsprintf( buf, L"Error code %08X", GetLastError( ));
MessageBox( NULL, buf, L"FAILURE", NULL );
}

我希望它将 len 设置为正确的大小,并给出错误代码 0x7A 以指示 ERROR_INSUFFICIENT_BUFFER。这是在 Windows 7 下发生的情况。我在 Windows XP 下实际得到的是 0x57 的错误代码,表示 ERROR_INVALID_PARAMETER

如果我将 flags 的值设置为,那么它在两个操作系统上都可以正常工作。我想弄清楚的是 ICU_REJECT_USERPWD 导致它在 XP 下失败的原因。

我知道我不需要为这个例子设置那个标志,但这只是我放在一起显示问题的一些测试代码。

非常感谢您对这个问题的任何帮助(或任何指出我做错了什么的人...)

最佳答案

如果将 components.nScheme 设置为 INTERNET_SCHEME_HTTP,将 components.nPort 设置为 80 会怎么样?文档仅指定字符串点可能为 NULL,例如 0 不会映射到 nScheme 的有效值。

此外,当您设置 dwSchemeLength 和 dwHostNameLength 时,您在包含终止 NULL 方面是不一致的。我不确定你是否真的应该这样做;文档似乎没有具体说明,但我猜可能没有。

如果将 dwSchemeLength 设置为 4,将 dwHostNameLength 设置为 10 会怎么样?如果这不起作用,请尝试将它们设置为 5 和 11。

我的猜测是结构不太正确;这可能有助于入门。

关于c++ - 使用 ICU_REJECT_USERPWD 标志集调用 WinHttpCreateUrl 在 Windows 7 中工作,但在 Windows XP 中不工作(使用虚拟 PC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com