检索默认的互联网超时值?

Retrieve default internet timeout values?

我正在尝试检索 INTERNET_OPTION_SEND_TIMEOUTINTERNET_OPTION_SEND_TIMEOUTINTERNET_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;

代码完成说它需要一个 (pointer,cardinal,pointer,cardinal)。
我看到调用 InternetQueryOption(nil,(也无法编译)或中间 InternetOpenUrl 的代码示例,但我想我不需要那个。

正如您通过查看 WinInet.pas 中的声明所见,InternetQueryOption 的最终参数是一个 var 参数:

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

该函数接收缓冲区的长度,但也会告诉您它向您的缓冲区写入了多少字节,因此您传入该参数的值需要是可修改的。常量 SizeOf(dwTimeOut) 不可修改。

将值存储在变量中,然后在该参数中传递变量。还要确保检查 API 函数的 return 值。它不会在出错时抛出异常;它将 return False.

var
  BufferSize: DWord;

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