Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создание COM-объекта


Автор: Luceus 31.3.2008, 09:40
Всем добрый день!

Ниже представлена функция, которая возвращает доступ к IHTMLDocument2 по указанному хендлу. Необходимо разработать COM объект, что бы его можно было использовать в VBScript'е, и при вызове данного метода, в VBScript возвращался объект. Подскажите, пожалуйста, как это сделать, или где можно об этом почитать с примерами?

Код

private IHTMLDocument2 IEDOMFromhWnd(IntPtr hWnd)
    {
      Guid IID_IHTMLDocument2 = new Guid("626FC520-A41E-11CF-A731-00A0C9082637");

      Int32 lRes = 0;
      Int32 lMsg;
      Int32 hr;

      if (IsIETridentDlgFrame(hWnd))
      {
        if (!IsIEServerWindow(hWnd))
        {
          // Get 1st child IE server window
          hWnd = NativeMethods.GetChildWindowHwnd(hWnd, "Internet Explorer_Server");
        }

        if (IsIEServerWindow(hWnd))
        {
          // Register the message
          lMsg = NativeMethods.RegisterWindowMessage("WM_HTML_GETOBJECT");
          // Get the object
          NativeMethods.SendMessageTimeout(hWnd, lMsg, 0, 0, NativeMethods.SMTO_ABORTIFHUNG, 1000, ref lRes);
          if (lRes != 0)
          {
            // Get the object from lRes
            IHTMLDocument2 ieDOMFromhWnd = null;
            hr = NativeMethods.ObjectFromLresult(lRes, ref IID_IHTMLDocument2, 0, ref ieDOMFromhWnd);
            if (hr != 0)
            {
              throw new COMException("ObjectFromLresult has thrown an exception", hr);
            }
            return ieDOMFromhWnd;
          }
        }
      }
      return null;
    }


Заранее благодарен.

Автор: mr.DUDA 31.3.2008, 10:32
Тут уже речь не только о создании COM (это само по себе более-менее просто), а заморочки с Internet Explorer-ом.

Автор: Luceus 31.3.2008, 10:37
mr.DUDA, у меня есть примеры по работе с Internet Explorer'ом как в VBScript, так и C#. Необходимо COM-объект, что бы потом его создать в VBScript'e и получить доступ к DOM модели документа, а дальше уже проще smile

Подскажите, пожалуйста, как это сделать?


Спасибо.

Автор: mr.DUDA 31.3.2008, 10:43
Читаем тему "Exposing .NET Framework Components to COM" в MSDN.

Автор: Luceus 31.3.2008, 10:49
Спасибо, буду разбираться.

Автор: Rififi 31.3.2008, 13:48
IE сам по себе является COM-обьектом. Никакие дополнительные заморочки с C# не нужны.

Автор: Luceus 31.3.2008, 14:38
Rififi, ты прав. Но у меня следующая задача. При нажатии на ссылку в браузере, запускается новое диалоговое окно (showModalDialog), которое содержит HTML. Обратится к нему можно или с самого скрипта по переменной (тестирование внешнее, поэтому это не подходит), или... или как я описал выше. Необходимо по хендлу окна получить доступ к содержимому модального окна.

Я занимаюсь разработкой библиотекой автоматизированного функ. тестирования, и вот столкнулся с этим.

Спасибо.

Автор: Rififi 31.3.2008, 15:00
Luceus,
я думаю, тебе помогут аттрибуты класса ComVisible(true) и InterfaceType(ComInterfaceType.InterfaceIsIDispatch)

Автор: Luceus 31.3.2008, 15:21
Rififi, пока я с C#"ом знаком на уровне синтаксиса. Библиотеки никогда на нем не делал. Почитаю ссылку. Как использовать ComVisible(true) и InterfaceType(ComInterfaceType.InterfaceIsIDispatch) и где я еще не знаю smile Если не будет получаться, я напишу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)