Я пытаюсь сделать приложение совместимым с auto proxy API, предоставляемым библиотекой WinINet , чтобы локальные pac-файлы работали, и я застрял с ошибкой ERROR_CAN_NOT_COMPLETE при попытке вызвать InternetGetProxyInfo ...
Я следил за постом Эрика Лоуэнтала (dev @Microsoft, поэтому я надеюсь, что его предложение в порядке, p) в здесь
и идея должна быть:
- вызов функции InternetInitializeAutoProxyDll;
- Вызовите InternetGetProxyInfo, чтобы получить прокси-URL для каждого заданного запрошенного URL;
- Вызовите InternetDeInitializeAutoProxyDll в конце.
Вот как выглядит мой код:
// Start by initializing the Auto proxy stuff
BOOL ok = InternetInitializeAutoProxyDll(0, pathToTheProxyPACFile,
NULL, NULL, NULL);
// Here ok is true so I consider the initialization was a success
// [...]
// Later on, I try to get the proxy used for each requested URL like this:
LPSTR proxyURL = NULL;
DWORD proxyURLLength = 0;
BOOL ok = InternetGetProxyInfo(requestedURL,
requestedURLLength,
hostName,
hostNameLength,
&proxyURL,
&proxyURLLength);
// Here ok is false, the proxy url and length are left as is,
// and a call to GetLastError() returns 1003 :s
Я не вижу, что с этим не так, и не смог найти убедительного примера в сети (а документации крайне не хватает ...).
Обратите внимание, что я попытался выделить буфер для proxyURL и установить его размер на proxyURLLength, так как в документации не ясно, как обрабатывать память, но это не работает, и я понимаю, что я должен позволить WinINet обработать его в любом случае, и используйте GlobalFree на proxyURL в случае успеха.
Я также пытался использовать InternetCrackUrlA, чтобы получить имя хоста на тот случай, если класс, который я использую для получения имени хоста по запрошенному URL, не подходит для этого API (и действительно, InternetCrackUrlA считает, что порт является частью имя хоста ...), но это тоже не помогло.
Пожалуйста, дайте мне знать о любом предложении, которое может помочь мне заставить это работать;)
PS: я использовал WinHTTP, чтобы сделать то же самое в той же части кода, и он работает правильно.
PPS: я тестирую это на Windows XP с установленным IE8.
Edit ==========> Я написал другую программу, которая вызывает только эти функции, и в этом случае у меня не возникает никаких проблем, поэтому я думаю, что моя проблема не в том, как я вызываю InternetGetProxyInfo, но из состояния, в котором я нахожусь, когда я его вызываю, то есть внутри
реализация приемника событий, используемого для нашего встроенного IE , если только нет проблем с моими включениями или чем-то в этом роде ..?