InternetExplorer настраивается как __ComObject вместо SHDocVw.InternetExplorer - PullRequest
0 голосов
/ 16 мая 2011

У меня проблема с InternetExplorer в SHDocVw.dll.У меня также есть ссылка на mshtml.tlb (во время поиска в Google я прочитал 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, он считается типом System.__ComObject вместо SHDocVw.InternetExplorer,и все части также имеют тип System.__ComObject.Когда я пытаюсь выполнить любое из следующих утверждений ...

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

... Я получаю одно и то же сообщение об ошибке:

Не удается неявно преобразовать тип 'System .__ ComObject' в'System.Windows.Forms.HtmlElement' (очевидно, что тип для преобразования отличается для IEObj.Document).

Я новичок в c # (из VBA, поэтому я знаком с программированием), но в VBA equivelant работает отлично, без необходимости конвертировать его.

Я что-то не так делаю?В случае, если это мое создание объекта, ниже приведен (примерно) код, который я использовал для проверки функции:

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, на которую ссылаются другие проекты.

1 Ответ

0 голосов
/ 16 мая 2011

Вы пытаетесь использовать класс WinForms HtmlElement, который не COM-объект.
Нельзя смешивать собственный InternetExplorer COM-объект с управляемыми классами вWinForms.

Вместо этого следует использовать классы WinForms (элемент управления WebBrowser).
В большинстве случаев вам вообще не нужен COM.

...