0

SHDocVw.dll の InternetExplorer に問題があります。私も mshtml.tlb を参照しています(グーグル中に、 mshtml.dll を参照する必要があるというコメントを1つ読みましたが、これはMicrosoft Visual Studio Expressでは実行できませんでしたが、これがどれほど真実かはわかりません)。これは、私にとっては機能しない最も基本的な形式の小さな関数です。

public static HtmlElement GetDocumentControlByID(
    ref SHDocVw.InternetExplorer IEObj, 
    string ControlID)
{
    HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);
    return ReturnElement;
}

問題は、IEObj インスタンスを作成すると、System.__ComObjectではなくtype と見なされSHDocVw.InternetExplorer、すべてのサブパーツも typeになることSystem.__ComObjectです。次のステートメントのいずれかを試すと...

Document WebDoc = IEObj.Document;
HtmlElement ReturnElement = IEObj.Document.GetElementById(ControlID);

...同じエラーメッセージが表示され続けます:

タイプ 'System.__ComObject' を 'System.Windows.Forms.HtmlElement' に暗黙的に変換することはできません (明らかに、変換先のタイプは とは異なりますIEObj.Document)。

私は c# を初めて使用します (VBA から来たので、プログラミングに精通しています) が、VBA では、同等のものはまったく変換する必要なく完全に機能します。

それは私が間違っていることですか?それがオブジェクトの作成である場合、次は関数をテストするために使用したコードです (大まかに):

public static void Main(String [] args)
{
    SHDocVw.InternetExplorer IEObj = new SHDocVw.InternetExplorer();
    IEObj.Navigate("http://sports.ladbrokes.com/");
    while (IEObj.ReadyState != 4)
    {

    }

    // There is a textbox that definitely exists

    HtmlElement NetControl = GetDocumentControlByID(ref IEObj, "username");

    // I was goint to manipulate it after this, but it crashes in the above function.

}

私が実際にやりたいことは、さまざまな要素をラッチして、テキスト ボックスにテキストを入力したり、ボタンをクリックしたりできるようにすることです。また、Document 変数 ( Document.Body.InnerHtmlなど) も使用できるようにする必要があります。プロジェクト全体は、他のプロジェクトから参照される DLL に含まれる一連の関数になります。

4

1 に答える 1

0

COM オブジェクトではないHtmlElementWinFormsクラスを使用しようとしています。ネイティブCOM オブジェクトを WinForms のマネージ クラスと 混在させることはできません。
InternetExplorer

代わりに、WinForms クラス (WebBrowserコントロール) を使用する必要があります。
ほとんどの場合、COM はまったく必要ありません。

于 2011-05-16T15:01:07.607 に答える