-->

检索默认网络超时值?(Retrieve default internet timeout value

2019-10-23 09:34发布

我想要检索的默认值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;

代码完成说,它需要一个(指针,红衣主教,指针,基数)。
我看到的代码示例有一个呼叫InternetQueryOption(nil, (这也不会编译),或通过中间InternetOpenUrl但我想我不需要这个。

Answer 1:

你可以通过查看WinInet.pas的声明看,最终参数InternetQueryOptionvar参数:

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));


文章来源: Retrieve default internet timeout values?