如何修复模块Project1.exe中地址00660938的"访问冲突".读取地址00000150.' 在印地(德尔福10.3里约热内卢)

ÇAĞ*_*AYA 1 delphi post indy

我正在编写一个解密JDownloader DLC文件的软件.该程序将使用POST请求将dlc文件发送到" http://dcrypt.it/decrypt/upload ",并将解码链接作为响应.

这是我抛出该错误的代码:

var
  Form1: TForm1;
    Stream: TStringStream;
    Params: TIdMultiPartFormDataStream;
    HTTP: TIdHTTP;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
  Stream := TStringStream.Create('');
  Params := TIdMultiPartFormDataStream.Create;
  Params.AddFile('File1', 'D:\3fcaa401f8f3ebe32fb93cb607ecadd01ee954ed.dlc', 'application/octet-stream');
  HTTP.Post('http://dcrypt.it/decrypt/upload', Params, Stream);
  ShowMessage(Stream.DataString);
end;
Run Code Online (Sandbox Code Playgroud)

当我调试我的程序时,Delphi IDE在IdHTTP.pas中显示这些:

function TIdCustomHTTP.GetRequest: TIdHTTPRequest;
begin
 Result := FHTTPProto.Request; //This line is highlighted.
end;
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做才能解决这个问题呢?

Dal*_*kar 6

您没有初始化HTTP组件.由于它是一个全局变量,它将自动初始化为nil.

当你打电话时,HTTP.Post('http://dcrypt.it/decrypt/upload', Params, Stream);它不会立即在通话地点断开.您在nil引用上调用它,因此只要它访问某个内部字段或尝试调用虚方法就会导致AV.

您必须在使用之前构造HTTP组件:

HTTP := TIdHTTP.Create(nil);
try
  ...
finally
  HTTP.Free;
end;
Run Code Online (Sandbox Code Playgroud)

此外,良好的做法是你应该避免使用全局变量.您可以而且应该将所有必要的变量声明为本地变量.并确保在完成后释放所有内容.