我在 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中,供其他项目引用。