0

我在 SHDocVw.dll 中遇到 InternetExplorer 问题。我也引用了 mshtml.tlb (在谷歌搜索时,我确实阅读了 1 条评论说我应该引用 mshtml.dll ,但这不能在Microsoft Visual Studio Express中完成,我不知道这是多么真实)。这是一个对我不起作用的最基本形式的小功能:

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

问题是当我创建 IEObj 实例时,它被认为是 typeSystem.__ComObject而不是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 对象的 WinFormsHtmlElement类。 您不能将本机COM 对象与 WinForms 中的托管类混合。
InternetExplorer

您应该改用 WinForms 类(WebBrowser控件)。
在大多数情况下,您根本不需要 COM。

于 2011-05-16T15:01:07.607 回答