Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代理更改例程在delphi 10.2上不起作用_Delphi_Delphi 7 - Fatal编程技术网

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

代理更改例程在delphi 10.2上不起作用,delphi,delphi-7,Delphi,Delphi 7,我正在使用Raises例程在系统内配置use proxy。 它在版本7的delphi中工作得非常好。在Delphi10.2(Tokyo)中,即使编译没有错误,调用例程时也会通知代理没有响应(即代理正常并且在Delphi7调用中工作) 有人知道会发生什么吗 function ApplyProxy(proxy: string):Boolean; var MyInternetProxyInfo: PInternetProxyInfo; begin try Result:=False; p

我正在使用Raises例程在系统内配置use proxy。 它在版本7的delphi中工作得非常好。在Delphi10.2(Tokyo)中,即使编译没有错误,调用例程时也会通知代理没有响应(即代理正常并且在Delphi7调用中工作)

有人知道会发生什么吗

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;
函数ApplyProxy(代理:字符串):布尔值;
变量
MyInternetProxyInfo:PInternetProxyInfo;
开始
尝试
结果:=假;
代理:=修剪(代理);
MyInternetProxyInfo:=新建(PInternetProxyInfo);
尝试
如果proxy=EmptyStr,则
MyInternetProxyInfo^.dwAccessType:=INTERNET\u OPEN\u TYPE\u DIRECT else
开始
MyInternetProxyInfo^.dwAccessType:=互联网\开放\类型\代理;
MyInternetProxyInfo^.lpszProxy:=PAnsiChar(Trim(proxy));
MyInternetProxyInfo^.lpszProxyBypass:=泛七边形(“”);
结束;
结果:=InternetSetOption(无,INTERNET选项代理,MyInternetProxyInfo,
SizeOf(MyInternetProxyInfo^);
最后
处置(MyInternetProxyInfo);
结束;
除了
结果:=假;
结束;
结束;

在Delphi 10.2中,字符串是unicode,编译器将警告

PAnsiChar(Trim(proxy)); 

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

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

例如:

MyInternetProxyInfo^.lpszProxy := PAnsiChar(AnsiString(Trim(proxy)));
根据建议,我改变了程序,开始在东京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;
函数ApplyProxy(代理:字符串):布尔值;
变量
MyInternetProxyInfo:PInternetProxyInfo;
开始
尝试
结果:=假;
代理:=修剪(代理);
MyInternetProxyInfo:=新建(PInternetProxyInfo);
尝试
如果proxy=EmptyStr,则
MyInternetProxyInfo^.dwAccessType:=INTERNET\u OPEN\u TYPE\u DIRECT else
开始
MyInternetProxyInfo^.dwAccessType:=互联网\开放\类型\代理;
MyInternetProxyInfo^.lpszProxy:=PAnsiChar(AnsiString(Trim(proxy));
MyInternetProxyInfo^.lpszProxyBypass:=泛七边形(“”);
结束;
结果:=InternetSetOption(无,INTERNET_选项_代理,MyInternetProxyInfo,SizeOf(MyInternetProxyInfo^));
最后
处置(MyInternetProxyInfo);
结束;
除了
结果:=假;
结束;
结束;

在Delphi 10.2中,东京字符串是unicode,编译器将提示
PAnsiChar(Trim(proxy))是W1044可疑的字符串类型转换到PAnsiChar,执行时将不起作用。首先将字符串转换为ansistring。我非常感激。非常感谢你。我就这样离开了它,它工作了,我非常需要它:MyInternetProxyInfo^.lpszProxy:=PAnsiChar(AnsiString(Trim(proxy));为什么使用ANSI版本的API而不是UNICODE版本
InternetSetOption()
应该映射到D2009+下的
InternetSetOptionW()
而不是
InternetSetOptionA()
。您应该使用
internetoption\u PER\u CONNECTION\u OPTION
来设置代理,而不是像MSDN文档所说的那样使用
internetoption\u proxy
。请注意,如果代理地址包含Unicode字符(无法从代理地址中找到IP地址),则此操作将失败。最好使用xxxW()API调用而不是xxxA(),因为xxxA()不需要类型转换,也不会在地址中的Unicode字符上失败。