运行我在 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。
如果我将标志的值设置为零,那么它在两个操作系统上都可以正常工作。我试图解决的是为什么ICU_REJECT_USERPWD导致它在 XP 下失败。
我意识到我不需要为这个例子设置那个标志,但这只是我为了显示问题而放在一起的一些测试代码。
非常感谢您对这个问题的任何帮助(或任何指出我做错了什么的人......)