Windows XP(Windows7のVirtualPCで)で開発しているアプリを実行すると、予期しないエラーが発生します。Windows764ビットProfessionalのVisualStudio2010を使用してコンパイルしています。
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を正しいサイズに設定し、 ERROR_INSUFFICIENT_BUFFERを示すために0x7Aのエラーコードを与えることを期待します。これは、Windows 7で発生することです。WindowsXPで実際に発生しているのは、ERROR_INVALID_PARAMETERを示す0x57のエラーコードです。
フラグの値をゼロに設定すると、両方のオペレーティングシステムで正常に機能します。私が解決しようとしているのは、ICU_REJECT_USERPWDがXPで失敗する理由です。
この例ではそのフラグを設定する必要はありませんが、これは問題を表示するためにまとめたテストコードにすぎません。
この問題について助けてくれてありがとう(または私が間違っていることを指摘してくれた人に...)