Delphi 突触可以';下载文件

Delphi 突触可以';下载文件,delphi,dll,lazarus,synapse,Delphi,Dll,Lazarus,Synapse,我正在和Lazarus一起制作一个DLL(用于GameMaker 8)。我有一个功能: function Download(URL: PChar; FileName: PChar):double; cdecl; var HTTPClient : THTTPSend; begin HTTPClient := THTTPSend.Create; try if(Ping(URL, 4000) <> 4000) then begin if HTTPCl

我正在和Lazarus一起制作一个DLL(用于GameMaker 8)。我有一个功能:

function Download(URL: PChar; FileName: PChar):double; cdecl;
var
  HTTPClient : THTTPSend;
begin
  HTTPClient := THTTPSend.Create;
  try
    if(Ping(URL, 4000) <> 4000) then
    begin
      if HTTPClient.HTTPMethod('GET', URL) then
      begin
        HTTPClient.Document.SaveToFile(FileName);
        if HTTPClient.ResultCode = 200 then Result := 1 else Result := 2;
      end
      else Result := 0;
    end
    else Result := 0;
  finally
    HTTPClient.Free;
  end;
end; 
例如,在我提供的URL中,“”(无引号)。在文件名中,我提供了一个不存在的文件“D:\logo.png”。无论我尝试什么,函数总是返回0(这意味着HTTPMethod不起作用),并且不保存文件(虽然,它以前工作了一段时间,但可能我修改了一些关键的内容)。DLL的函数在GameMaker中定义正确,如果提供无法访问的URL(Ping=4000),它将冻结


我对DLL、Synapse和Lazarus有点陌生。有什么地方我做错了吗?

OT:“它以前工作了一段时间,但可能我修改了一些关键的东西”,好吧,这是一个很好的教训,让你开始使用版本控制系统。没有什么好的理由在下载服务器之前ping服务器。那只是浪费时间和资源。在超时情况下自行执行下载,并处理可能发生的任何错误。@RemyLebeau我找不到有关timeouting HTTPMethod的任何信息,我对其进行了ping以防止应用程序冻结。@GreatCorn ping不会阻止冻结。它所能做的只是告诉您是否可以访问服务器,但是实际上访问服务器仍然可以冻结
THTTPSend
具有
SetTimeout()
setendtimeout()
SetRecvTimeout()
function Ping(ip:PChar; ttl:double):double; cdecl;
var PingSend: TPINGSend; PingBool: boolean;
begin
  PingSend := TPINGSend.Create;
  try
    PingSend.Timeout := round(ttl);
    PingBool := PingSend.Ping(ip);
    if PingBool = True then Result := PingSend.PingTime else Result := PingSend.Timeout;
  finally
    PingSend.Free;
  end;
end;