首页 > 解决方案 > 代理更改例程在 delphi 10.2 Tokyo 上不起作用

问题描述

我正在使用 Raises 例程在系统内配置使用代理。它在版本 7 的 delphi 中完美运行。在 Delphi 10.2 (Tokyo) 中,即使编译没有错误,调用例程时也会通知代理没有响应(因为代理正常并且在 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;

标签: delphidelphi-7

解决方案


在 Delphi 10.2 Tokyo 中,字符串是 unicode,编译器会发出警告

PAnsiChar(Trim(proxy)); 

W1044 字符串到 PAnsiChar 的可疑类型转换。

这在执行时不起作用。将字符串转换为AnsiString第一个。

例如:

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

推荐阅读