void fn(HINTERNET hfile,...){
char *url=new char[3000];
DWORD *len = new DWORD;
if(InternetQueryOption(hFile, INTERNET_OPTION_URL, url, len)==FALSE){
char* tmp=new char[3000];
sprintf(temp, "InternetQueryOption failed!\nError: %d\nRequired bytes: %d\n", GetLastError(),*len);
MessageBox(NULL, tmp, _T("myBHO !!!"), MB_OK | MB_ICONINFORMATION);
delete [] tmp;
}
//....
delete [] url;
delete len;
}
В этой функции я использую InternetQueryOption() с опцией INTERNET_OPTION_URL найти URL дескриптора hfile. Результат будет возвращен в URL [] и длина в len.InternetQueryOption (..) терпит неудачу и GetLastError() всегда возвращает 122 (ERROR_INSUFFICIENT_BUFFER)
Но функция всегда терпит неудачу и GetLastError() всегда возвращает 122 (ERROR_INSUFFICIENT_BUFFER).
Согласно this, максимальная длина URL-адреса в IE составляет 2083, тогда как я использую буфер длиной 3000. Так как же эта ошибка возможна? Я даже сделал url [] глобальный, все та же ошибка.
Теперь, согласно IntenetQueryOption() documentation, если GetLastError() возвращает ERROR_INSUFFICIENT_BUFFER, то переменная Len указывает на количество байтов, необходимых для хранения требуемой информации (в данном случае информация URL). И это значение всегда меньше 100. Так как URL может не соответствовать ulr []?
В чем может быть причина этого странного поведения? Пожалуйста, помогите.
Вместо использования 'DWORD * len = new DWORD;' вы должны сделать 'DWORD len = 3000;' и вызвать функцию следующим образом: 'InternetQueryOption (hFile, INTERNET_OPTION_URL, url, & len)'. –