Witam, pisze sobie program do wysylania pliczkow na serwer w oparciu o CurlPas.
No i mam problem :/ Mianowicie po uruchomieniu programu plik jest przesylany - JEDEN PLIK.
Dzieje się to w wątku. Wątek się kończy i zwracany jest link do pliku. Wszystko fajnie, itd. ALE gdy klikne ponownie button uruchamiający wątek, to program wykrzacza się dająć mi error "Accesc Violation ...adres... " in "msvcrt.dll" :/
Nie wiem jak zobie z tym poradzić :/
Oto kawałek kodu odpowiedzialny za innicjalizacji Curl'a oraz wysylania pliku
type upShareBase = class(TThread)
private
obCurl : TCurl;
kodHTML : string;
procedure OnRecive(Sender:tObject; data:pChar; len:LongWord; var bContinue:Boolean);
procedure Progress(Sender: TObject; BytesTotal, BytesNow:longint; var bContinue:Boolean);
function getNumerSerwera : string;
protected
procedure execute; override;
end;
procedure upShareBase.OnRecive(Sender: tObject; data: pChar; len: LongWord;
var bContinue: Boolean);
begin
kodHTML := kodHTML + data;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
up := upShareBase.Create(false);
end;
procedure upShareBase.Execute
var NumerSerwera : string;
anLink : TMatch;
i : integer;
begin
inherited;
sleep(100);
obCurl := TCurl.Create(nil);
obCurl.URL := 'http://sharebase.to';
obCurl.OnReceive := OnRecive;
obCurl.Perform;
obCurl.Clear;
sleep(1000);
obcurl.Timeout := 40000;
obCurl.FreshConnect := False;
NumerSerwera := getNumerSerwera;
kodHTML := '';
// form1.Memo1.Lines.Add(numerserwera);
obCurl.URL := 'http://sr'+NumerSerwera+'.sharebase.to/upload/';
obCurl.Referer := 'http://sharebase.to';
obCurl.FormData.Add('usrv','sr'+NumerSerwera,'',POST_TYPE_PLAIN);
obCurl.FormData.Add('umid','','',POST_TYPE_PLAIN);
obCurl.FormData.Add('ufile','c:\ttt2.rar','multipart/form-data',POST_TYPE_ATTACHMENT); // tutaj plik
obCurl.FormData.Add('101','Upload Now !','',POST_TYPE_PLAIN);
obCurl.FormData.Add('ulaid','','',POST_TYPE_PLAIN);
obCurl.OnProgress := Progress;
obCurl.OnReceive := onRecive;
obcurl.Verbose := true;
if not obcurl.Perform then form1.Memo1.Lines.Add(obcurl.ErrorString);
obCurl.Destroy;
anLink := nil;
anLink := Form1.Ereg(kodHTML,'http://sharebase.to/files/|">');
for i := 0 to high(anlink) do
begin
if (anlink[i] <> '') and not (Pos('/',anlink[i])>0) then
form1.Memo1.Lines.Add('http://sharebase.to/files/'+anlink[i]) // zwraca kawalek linku
end;
I tak jak pisalem, po uruchomieniu programu, i kliknieciu na Button, plik zostaje wyslany - a link do niego zostaje zwrocony w TMemo.
Jednak gdy drugi raz klikne na button, to plik pobierze jedynie kod html strony, ale plik nie zostanie już wysłany bo program wykrzaczy się errorem z udziałem msvcrt.dll :/
Program docelowo ma obslugiwac mój serwer - jednak na razie jeszcze go nie kupiłem dlatego też testuję wysyłanie na Sharebase.to z racji łatwości obłsugi (brak captcha itd.)
// Ewentualnie poszukuje jakiegoś komponentu w stylu Curl -> odpada użyci WinInet (np. ten sposob z 4p).