代理更改例程在delphi 10.2 Tokyo上不起作用

时间:2018-07-13 19:55:34

标签: delphi delphi-7

我正在使用Raises例程在系统内配置Use Proxy。 它在版本7的delphi中可以完美运行。在Delphi 10.2(东京)中,甚至在编译时也没有错误,调用例程时会通知代理没有响应(因为代理可以正常运行,并且可以在delphi 7调用中工作)。

有人会知道会发生什么吗?

function ApplyProxy(proxy: string):Boolean;
var
  MyInternetProxyInfo: PInternetProxyInfo;
begin
 try
  Result:=False;
  proxy:=Trim(proxy);
  MyInternetProxyInfo:=New(PInternetProxyInfo);
  try
    if proxy = EmptyStr then
      MyInternetProxyInfo^.dwAccessType := INTERNET_OPEN_TYPE_DIRECT else
    begin
      MyInternetProxyInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
      MyInternetProxyInfo^.lpszProxy := PAnsiChar(Trim(proxy));
      MyInternetProxyInfo^.lpszProxyBypass := PAnsiChar('<local>');
    end;
    Result:=InternetSetOption(nil, INTERNET_OPTION_PROXY, MyInternetProxyInfo, 
      SizeOf(MyInternetProxyInfo^));
  finally
    Dispose(MyInternetProxyInfo);
  end;
 except
  Result:=False;
 end;
end;

2 个答案:

答案 0 :(得分:2)

在Delphi 10.2中,东京字符串是unicode,编译器会警告

PAnsiChar(Trim(proxy)); 

  

W1044将字符串可疑地转换为PAnsiChar。

,这在执行时将不起作用。首先将字符串转换为AnsiString

例如:

MyInternetProxyInfo^.lpszProxy := PAnsiChar(AnsiString(Trim(proxy)));

答案 1 :(得分:1)

根据LU-RD的建议,我更改了例程并开始在tokio 10.2更新3上运行。

function ApplyProxy(proxy: string):Boolean;
var
  MyInternetProxyInfo: PInternetProxyInfo;
begin
 try
  Result:=False;
  proxy:=Trim(proxy);
  MyInternetProxyInfo:=New(PInternetProxyInfo);
  try
    if proxy = EmptyStr then
      MyInternetProxyInfo^.dwAccessType := INTERNET_OPEN_TYPE_DIRECT else
    begin
      MyInternetProxyInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
      MyInternetProxyInfo^.lpszProxy := PAnsiChar(AnsiString(Trim(proxy)));
      MyInternetProxyInfo^.lpszProxyBypass := PAnsiChar('<local>');
    end;
    Result:=InternetSetOption(nil, INTERNET_OPTION_PROXY, MyInternetProxyInfo, SizeOf(MyInternetProxyInfo^));
  finally
    Dispose(MyInternetProxyInfo);
  end;
 except
  Result:=False;
 end;
end;