IHTMLdocument2 и Access violation

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by xophet, 17 May 2011.

  1. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Всем привет!
    Такая проблема:
    скачиваю страницу из инета, и запихиваю ее в IHTMLDocument2 (здесь все ок)
    Затем выдираю ее из IHTMLDocument2 следующей функцией:
    Code:
    function GetHtml(doc: IHtmlDocument2): string;
    var
      iDisp: IDispatch;
      iCollection: IHTMLElementCollection;
      mm:IHTMLElement;
    begin
      result := '';
      iCollection := doc.all.Tags('HTML') as IHTMLElementCollection;
        iDisp := iCollection.item(0, 0);
        result := (iDisp as IHTMLElement).outerHTML;
    end;
    
    с выполнившимися скриптами и ищу значится что мне там нужно.
    Все работает на 95% сайтов, а на некоторых в строке result := (iDisp as IHTMLElement).outerHTML; происходит сначала Access violation in module "mshtml.dll', а потом сразу же
    Access violation in module "jscript.dll'
    Пробовал заменять выкинуть все, и оставить только result:=Doc.body.outerHTML; все равно, ошибки те же.
    кто-нибудь сталкивался? или кто-нибудь может подсказать, как это решить?
     
    #1 xophet, 17 May 2011
    Last edited: 17 May 2011
  2. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    295
    Likes Received:
    41
    Reputations:
    25
    Попробуй в try..except запихнуть, посмотри какую ошибку скажет.

    Вот так:

    Code:
    function GetHtml(doc: IHtmlDocument2): string;
    var
      iDisp: IDispatch;
      iCollection: IHTMLElementCollection;
      mm:IHTMLElement;
    begin
      result := '';
    
    [B]try [/B]
    
      iCollection := doc.all.Tags('HTML') as IHTMLElementCollection;
        iDisp := iCollection.item(0, 0);
        result := (iDisp as IHTMLElement).outerHTML;
    
    
    [B]except on E: MessageBox('Ошибка: ' + E.Message);
    end;[/B]
    
     
    end;
     
    #2 Steam[777], 17 May 2011
    Last edited: 17 May 2011
  3. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Да, я понял, просто тут вообще какая-то лажа получается
    (ошибка write to memory address вылазит), но
    это если делаю так: showmessage(gethtml(doc));
    если делаю так (doc обьявлен приватно для процедуры):
    memo.text:=(gethtml(doc));
    ошибка не вываливается,
    если делаю так же, но doc - глобальная переменная, то ошибка снова вываливается при чем с сообщением "priveledged instruction"
     
    #3 xophet, 17 May 2011
    Last edited: 17 May 2011
  4. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    295
    Likes Received:
    41
    Reputations:
    25
    Так E.Message что показал то?
     
  5. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    "privileged instruction" показал, но это он че-то 1 раз такое показал, а все остальные разы тупо "Access violation ..."
     
    #5 xophet, 17 May 2011
    Last edited: 17 May 2011