2012-01-17 7 views
0

これは簡単な修正であることがわかりますが、私は困惑しています。私はSHDocVw.InternetExplorer.Documentを使用してDOMにアクセスしようとするとエラーが発生する

COMExceptionはを取得していますエラーが未処理だった

これは

エラーHRESULT E_FAILがCOMコンポーネントの呼び出しから返されています。

これはコードですが、これはエラーを発生している行がある

class SMSHandler 
{ 
    private InternetExplorer ie; 
    private object URL = "##########"; 
    private object URL2 = "###########"; 

    public SMSHandler() 
    { 
     ie = new InternetExplorer(); 
     ie.Visible = true; 
    } 

    public void openMACS() 
    { 
     object Empty = 0; 

     ie.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty); 

     while (ie.Busy); 

     ie.Navigate2(ref URL2, ref Empty, ref Empty, ref Empty, ref Empty); 

     IHTMLDocument2 HTMLDoc = (IHTMLDocument2)ie.Document; 

    } 

(私はしかし、URL、彼らは有効であるが消されている)

IHTMLDocument2 HTMLDoc = (IHTMLDocument2)ie.Document; 

Webページは、しかしとき細かい開きますドキュメントをIHTMLDocument2に割り当てようとしましたが失敗しました。

すべてのヘルプは

答えて

5

ページの読み込みが完了するまで忘れてしまいます。その間(すなわち、Busy);ループはかなり醜いです、あなたはIEが完了するのを待っている間、100%コアを燃やしたくありません。代わりにDocumentCompleteイベントを使用します。そして、あなたがどこにいるかを追跡するための状態機械。

private int state = 0; 
public SMSHandler() 
{ 
    ie = new InternetExplorer(); 
    ie.DocumentComplete += ie_DocumentComplete; 
    ie.Visible = true; 
} 

void ie_DocumentComplete(object pDisp, ref object URL) { 
    object Empty = 0; 
    if (state == 1) { 
     ie.Navigate2(ref URL2, ref Empty, ref Empty, ref Empty, ref Empty); 
     state++; 
    } 
    else if (state == 2) { 
     IHTMLDocument2 HTMLDoc = (IHTMLDocument2)ie.Document; 
     // etc.. 
     state = 0; 
    } 
} 

public void openMACS() 
{ 
    object Empty = 0; 
    state = 1; 
    ie.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty); 
} 

IEをアウトオブプロセスで実行する必要がないようにWebBrowserクラスを使用することを検討してください。 This answerは別のスレッドで実行する方法を示しています。これはあなたのコードでE_FAILを取得した可能性が高い理由です。

+0

私のニーズに合っているように、これは助けてくれてありがとう –

0

コードは私のためにローカルで動作します素晴らしいことだが、私はあなたのため亀裂がかかります。

ie.Documentタイプをご覧ください。私にとってはIHTMLDocument2インターフェイスを実装するmshtml.HTMLDocumentClassを返します。おそらく、適切なDLLを参照していない可能性があります。手作業でSHDocVw.dllmshtmlの参考文献を追加したとしますか?

また、タイミングを確認してください。ドキュメントをキャストするときにE_FAILがありましたが、Navigateが完了していませんでした。したがって、キャストを実行する前に待つ必要があります。

関連する問題