2015-06-15 4 views
1

Я пытаюсь получить значения по умолчанию для INTERNET_OPTION_SEND_TIMEOUT, INTERNET_OPTION_SEND_TIMEOUT и INTERNET_OPTION_RECEIVE_TIMEOUT флаги опций. Из того, что я читал, они находятся в WinInit.Получить значения времени ожидания интернет-времени по умолчанию?

Код, указанный ниже, не компилируется Types of actual and formal var parameters must be identical, , но какой параметр является неправильным?

procedure TFrmWininetTimeOuts.FormShow(Sender: TObject); 
var 
    hSession  : HINTERNET; 
    dwTimeOut : DWORD; 
begin 
    hSession := InternetOpen('usersession', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); 
    if not Assigned(hSession) then Exit; 
    try 
    InternetQueryOption(hSession, INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut)); 
    finally 
    InternetCloseHandle(hSession); 
    end; 
end; 

Окончание кода говорит о необходимости (указатель, кардинал, указатель, кардинал).
Я вижу примеры кода с вызовом InternetQueryOption(nil, (который также не компилируется) или с промежуточным InternetOpenUrl, но я думаю, мне это не нужно.

ответ

2

Как вы можете видеть, глядя на декларации в WinInet.pas, последний параметр InternetQueryOption является var параметр:

function InternetQueryOption(hInet: HINTERNET; dwOption: DWORD; 
    lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall; 

Функция получает длину буфера, но и говорит вам сколько байтов написано в вашем буфере, поэтому значение, которое вы передаете в этом параметре, должно быть модифицируемым. Константа SizeOf(dwTimeOut) не поддается изменению.

Сохраните значение в переменной, а затем передайте переменную в этом параметре. Также обязательно проверьте возвращаемое значение функции API. Он не будет генерировать исключение по ошибке; он вернется False.

var 
    BufferSize: DWord; 

BufferSize := SizeOf(dwTimeOut); 
Win32Check(InternetQueryOption(hSession, INTERNET_OPTION_RECEIVE_TIMEOUT, 
           @dwTimeOut, BufferSize)); 
+0

Спасибо, по умолчанию на моей машине Win7/64 IE9 есть 60,30,30 секунд для подключения/отправки/получения. –

 Смежные вопросы

  • Нет связанных вопросов^_^