Delphi, function, procedure, error

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kandi, 20 Sep 2010.

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Всем хелоу) собственно такая проблемка, есть функция примерно такого вида:
    Code:
    function ololo(const i, j: integer):boolean;
    begin
       { мега код }
     If ololo then
       Result := True
     else
       Result := False;
    end;
    есть процедура:
    Code:
    procedure ololo1;
    var
     z: boolean;
    begin
     z:=ololo(i, j);
     {ЗДЕСЬ НАДО СДЕЛАТЬ ПРОВЕРКУ, ЧТО ВЕРНУЛА ФУНКЦИЯ OLOLO, true or false}
    end;
    проверку делал таким образом:
    Code:
    if z then
     { code }
     else
     { code2 };
    но в таком варианте вылитает ошибка... :eek:
    как проверить...а то программка виснет нафиг, вообще функция находиться в цикле, успевает ли она вернуть значение...мм?) кто что может рассказать мне по этому поводу?

    P.S. а время то...ппц... :D
     
  2. kakeolala

    kakeolala Banned

    Joined:
    13 Jul 2010
    Messages:
    118
    Likes Received:
    2
    Reputations:
    0
    OLOL
    if .. then .. else - переводиться как: если .. то .. иначе

    if z then - ЕСЛИ Z ТО
    If ololo then - ЕСЛИ ololo ТО

    напиши свои куски кодов полностью - помогу
     
  3. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Что за ошибка, где вылетает, отладчиком пользоваться не учили? Ну и код бы весь увидеть тоже не помешало) О_о
     
  4. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Мне кажется у тебя условие сформировано неправильно. Покажи то что выдает компилятор, даже думаю в интернете или справке можешь найти нужную инфу.
     
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    PHP:
    function ololo(const ijinteger):boolean;
    begin
       
    мега код }
     If 
    ololo then
       Result 
    := True
     
    else
       
    Result := False;
    end;
    Так это же рекурсия :D
    Ты запускаешь ololo первый раз, она вызывает саму себя же:
    If ololo then
    а эта проверка опять вызывает саму себя же и т.д.
    Получаем EStackOverflow или как там..

    Нифига..только зачем в примере называть функцию ololo и тут же условие писать ololo? путаница
     
    #5 GhostOnline, 20 Sep 2010
    Last edited: 20 Sep 2010
  6. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Ловите, вот функция:
    Code:
    function TMainForm.LoginVK(const Mail, Pass: string): boolean;
    var
      Cookie, StrPage, StrPage2 : String; //Создаём переменную
      Post : TStringList; //Создаём переменную Post
    begin
     try
      Post:=TStringList.Create;
    
      // первый пост, передаём данные
      Post.Add('act=login');
      Post.Add('success_url=');
      Post.Add('fail_url=');
      Post.Add('try_to_login=1');
      Post.Add('to=');
      Post.Add('vk=');
      Post.Add('email='+Mail);
      Post.Add('pass='+Pass);
      Post.Add('expire=');
      StrPage:=HTTP.Post('http://login.vk.com', Post);
      //Чистим пост
      Post.Clear;
      // тащим куки
      Cookie:=Copy(StrPage, 351, 56);
      // второй пост, передаём куки =)
      Post.Add('s='+Cookie);
      Post.Add('op=slogin');
      Post.Add('redirect=1');
      Post.Add('expire=0');
      Post.Add('to=');
      Post.Add('fail_url=');
      Post.Add('try_to_login=1');
      Post.Add('to');
      StrPage2:=HTTP.Post('http://vkontakte.ru/login.php', Post);
    
      If Pos('window.awayHash', StrPage2) <> 0 Then
        Result := True
      Else
        Result := False;
     finally
    
     end;
    end;
    
    вот процедура:
    Code:
    // --- Парсим мыло и пасс с ListBoxAccount --- //
    procedure TMainForm.OkLetsGo;
    var
     z : boolean;
     i : integer;
     Mail, Pass, per : string;
     Tmp : TStrings;
    begin
      Tmp := TStrings.Create;
      Tmp := ListBoxAccount.Items;
     if ListBoxAccount.Count <> 0 then
      Begin
       for I := 0 to Tmp.Count-1 do
        begin
          if Pos(';', tmp[i])<>0 then
          begin
            per := tmp[i];
            Pass := Copy(per, Pos(';', per)+1, Length(per)-Pos(';', per)+1);
            SetLength(per, Pos(';', per)-1);
            Mail := per;
            memolog.Lines.Add('Нашёл: mail = '+mail+'  |  pass = '+pass);
            // отсылаем запрос на авторизацию если вернёться True тогда всё окей :)
            z := LoginVK(Mail, Pass);
              if z = true then
               begin
                MemoLog.Lines.Add('Авторизация прошла успешно!');
                MemoGoodAcc.Lines.Add(Mail+';'+Pass);
               end
               else
               begin
                 MemoLog.Lines.Add('Авторизация не удалась! Аккаунт не активен!');
                 MemoFuckAcc.Lines.Add(Mail+';'+Pass);
               end;
          end;
        end;
       End
       else
       MemoLog.Lines.Add('Добавьте аккаунты!')
    end;
    
    ну и собственно потом кнопочкой вызываю OkLetsGo и там...фигу :) мб где то ошибся...хотя не заметил этого. :confused:

    P.S. я пока учусь так, что не ругайте :D
     
  7. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Откуда в LoginVK взялся HTTP?
    Хоть бы текст ошибки привел...

    Ну и утечка памяти:
    Code:
    Tmp := TStrings.Create;
    Tmp := ListBoxAccount.Items;
     
  8. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    От верблюда он взялся:
    Code:
    uses Idhttp;
    
      private
        { Private declarations }
        HTTP : TidHTTP;
    пока мы не об утечки говорим.... я не знаю как ошибки выложить и откуда их взять, расскажите мне.. :(


    после нажатия кнопки вылитает окошко error пишет:
    Code:
     Access violation at address 00552F14 in module 'ChekerProject.exe'. Read of adress 00000148
    жму окей и всё... :\
     
  9. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Code:
    HTTP : =TidHTTP.Create
    А эта строчка где?
     
    1 person likes this.
  10. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Добавил я ее в :
    Code:
    function TMainForm.LoginVK(const Mail, Pass: string): boolean;
    var
      Cookie, StrPage, StrPage2 : String; //Создаём переменную
      Post : TStringList; //Создаём переменную Post
    begin
     try
      Post:=TStringList.Create;
      HTTP := TidHTTP.Create(nil);
    
      // первый пост, передаём данные
      Post.Add('act=login');
      Post.Add('success_url=');
      Post.Add('fail_url=');
      Post.Add('try_to_login=1');
      Post.Add('to=');
      Post.Add('vk=');
      Post.Add('email='+Mail);
      Post.Add('pass='+Pass);
      Post.Add('expire=');
      StrPage:=HTTP.Post('http://login.vk.com', Post);
      //Чистим пост
      Post.Clear;
      // тащим куки
      Cookie:=Copy(StrPage, 351, 56);
      // второй пост, передаём куки =)
      Post.Add('s='+Cookie);
      Post.Add('op=slogin');
      Post.Add('redirect=1');
      Post.Add('expire=0');
      Post.Add('to=');
      Post.Add('fail_url=');
      Post.Add('try_to_login=1');
      Post.Add('to');
      StrPage2:=HTTP.Post('http://vkontakte.ru/login.php', Post);
    
      If Pos('window.awayHash', StrPage2) <> 0 Then
        Result := True
      Else
        Result := False;
     finally
    
     end;
    end;
    

    а в прочем уже разобрался со своими ошибками, спасибо Redeemer я создал HTTP появилась ошибка 302 потом поставил в функции редирект тру и куки и понеслась кривая в щавель :)
     
  11. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Да не за что:) Только теперь еще сделай вот так:
    Code:
    function TMainForm.LoginVK(const Mail, Pass: string): boolean;
    var
      Cookie, StrPage, StrPage2 : String; //Создаём переменную
      Post : TStringList; //Создаём переменную Post
    begin
     Post:=TStringList.Create;
     HTTP := TidHTTP.Create(nil);
     try
      // тут куча твоего кода
     finally
       HTTP.Free;
       Post.Free;
     end;
    end;
    
     
    #11 Redeemer, 21 Sep 2010
    Last edited: 21 Sep 2010
  12. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    да память надо освободить :) :rolleyes: