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; :/