Wątki + TCurl

0

Witam, używam TCurl z http://curlpas.sourceforge.net/.

Łączę się ze storną i chcę wysłać plik :

function TForm1.UploadFile(plik: string): string;
var
  forma : TMatch;
  Adres : string;
  i : integer;
  k : integer;
  Nazwa,Sciezka : string;

begin

 kodHTML := '';

 cURl := tcurl.Create(nil);

 begin
 Application.ProcessMessages;
 cURL.URL := 'strona'; //pobranie strony logowania
 cURL.OnReceive := CurlOnRecieve;
 cUrl.CookieSession := true;
  curl.Threaded := false;
 cUrl.CookieFile := 'c.txt';
 cUrl.Perform;
 //cURL.Free;
       end;
 forma := Form1.Ereg(kodHTML,'/xx|asdf');

 for i:=0 to high(forma)  do
  begin
   if (length(forma[i]) > 0) and (forma[i] <> '') then
    begin
      Application.ProcessMessages;
      adres := forma[i];
    end;
  end;
 Application.ProcessMessages;
 Form1.Memo1.Lines.Add('------ ADRES --------');
 Form1.Memo1.Lines.Add(adres);

 //===========

 //===========
 cUrl := tcurl.Create(nil);
 curl.FreshConnect := true;
  Application.ProcessMessages;
  cUrl.Referer := 'ref';
  cUrl.URL := 'strona'+adres;
  cUrl.FormData.Add( 'MAX_FILE_SIZE',  '', '', POST_TYPE_PLAIN );
  cUrl.FormData.Add( 'files[]', plik, 'multipart/form-data', POST_TYPE_ATTACHMENT );
  cUrl.OnProgress := CurlOnProgress;
  cUrl.UserAgent := 'Opera/9.27 (Windows NT 5.1; U; pl)';
  cUrl.OnReceive := CurlOnRecieve;
  cUrl.FollowLocation := true;
  cUrl.CookieSession := true;
  cUrl.CookieFile := 'c.txt';
  curl.Threaded := false;
  curl.Perform;
 curl.Free;

    forma := Form1.Ereg(kodHTML,'<!-- YOUR_FILE:| -->');
 for i := 0 to High(forma) do
  begin
   if(forma[i] <> '') and (Length(forma[i])>0)then
    adres := forma[i];
  end;


  result := adres;

To szystko było w wątku - tylko teraz przeniosłem do funkcji. Nie mniej jednak problem cały czas ten sam.
Najpierw loguję się na stronę (nie ma tutaj tej funkcji) przy pomocy TCurl.
Następnie, uruchamiam w/w funkcję (poprzednio był to wątek). Plik zostaje wysłany raz.
Dostaje w TMemo link do niego - czyli niby jest ok. Uruchamiam ponownie w/w funkcję -> dostaje Access Violation :/

Zamknę program, uruchomię go ponownie, zaloguję się -> uruchomię upload -> jest ok. Uruchomię drugi raz upload (czyli w/w funkcje) -> Access Violation.

Tak więc panowie - O co chodzi ? Przecie z zwalniam TCurl o_O

btw. ten sam błąd z AccessViolation występował gdy w/w kod był w wątku w Execute; :/

0

use Debugger luck

0

Kurde, no niby wszystko ok :/ Wszystko wydaje sie byc na swoim miejscu, zmienne maja odpowiednie wartosci, wydaje sie ze wszystko jest odpowiednio zwalniane - a jednak Access Violation i problem z msvcrt.dll :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1