delphi - 代理更改例程在 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;
解决方案
在 Delphi 10.2 Tokyo 中,字符串是 unicode,编译器会发出警告
PAnsiChar(Trim(proxy));
是
W1044 字符串到 PAnsiChar 的可疑类型转换。
这在执行时不起作用。将字符串转换为AnsiString
第一个。
例如:
MyInternetProxyInfo^.lpszProxy := PAnsiChar(AnsiString(Trim(proxy)));