我正在使用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;
答案 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;