Поделиться через


Образец INPROC: демонстрация приложения внутрипроцессного сервера автоматизации

Обновлен: Ноябрь 2007

Образец INPROC представляет внутрипроцессный сервер автоматизации (ранее называвшейся OLE-автоматизацией). В отличие от других образцов сервера автоматизации MFC, образец INPROC можно загрузить в виде библиотеки DLL в адресное пространство клиента. Обычно внутрипроцессные серверы более эффективны, чем серверы, реализованные в виде отдельных EXE-файлов, поскольку для вызова методов объектов, реализованных в сервере, не нужен удаленный вызов процедур (RPC).

x2f73269.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи.

x2f73269.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению.

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

Построение и запуск образца INPROC

  1. Откройте решение inproc.sln.

  2. В меню Построение выберите команду Построить.

  3. Зарегистрируйте библиотеку DLL INPROC с помощью REG-файла проекта, то есть запустите файл regedit INPROC.REG или используйте программу REGSVR из образца REGSVR.

    Если используется средство REGEDIT, убедитесь, что библиотека Inproc.dll находится в системном пути. Также можно изменить REG-файл, явно задав в нем путь к Inproc.dll.

    Библиотека DLL не может запускаться в изолированном режиме, подобно EXE-файлу, и поэтому для проверки INPROC необходимо управляющее клиентское приложение. Образцом INPROC можно управлять из приложения Visual Basic или Visual C++. Пример управления INPROC из приложения Visual C++ см. в образце IPDRIVE.

    x2f73269.alert_note(ru-ru,VS.90).gifПримечание.

    Можно построить EXE-версию или DLL-версию приложения INPROC. Установите вариант EXE в параметрах проекта образца. EXE -версия образца INPROC регистрируется только в реестре Windows.

Классы INPROC

В классе CVariantMap реализуется сопоставление VARIANT и VARIANT. Это позволяет сопоставить любой объект VARIANT с любым другим объектом VARIANT. Такое сопоставление вряд ли окажется полезным для программистов на Visual C++ (которые скорее всего будут непосредственно использовать CMap), однако оно позволяет программистам на Visual Basic использовать возможности классов из коллекции MFC. Доступ к классу CVariantMap выполняется по имени mfc.inproc.varmap. Таким образом объект регистрируется в реестре Windows. В классе CVariantMap реализованы стандартные методы и свойства коллекции, а также метод _NewEnum.

В классе CStringCollect реализован массив строк. Эта реализация проще, чем класс CVariantMap, несмотря на то что реализуются многие из функций автоматизации, аналогичные классу CVariantMap. Доступ к объекту CStringCollect выполняется по имени mfc.inproc.strcoll. В нем реализовано большинство стандартных методов и свойств коллекции. Этот объект служит хорошим примером реализации собственных коллекций. Особый интерес представляет реализация метода _NewEnum, который дает программистам на Visual Basic возможность использовать синтаксис For Each... In во время перечисления содержимого коллекции. В классе CStringCollect для реализации этих функций используется класс CEnumVariant (в нем реализован интерфейс IEnumVARIANT с помощью схем интерфейсов MFC). Класс CEnumVariant может оказаться полезным в пользовательских приложениях.

Наконец, в образце реализовано несколько свойств-заглушек, которые просто используются для сравнения производительности внутрипроцессных серверов и серверов LocalServer. Эти свойства тестируются кнопками Test1 и Test2 в IPDRIVE.

Ключевые слова

В этом образце показаны следующие ключевые слова:

AfxIsValidAddress; AfxMessageBox; AfxOleInit; AfxOleLockApp; AfxOleUnlockApp; AfxThrowMemoryException; AfxThrowOleException; CCmdTarget::EnableAutomation; CCmdTarget::GetIDispatch; CCmdTarget::OnFinalRelease; CString::AllocSysString; CWinApp::InitInstance; CWinApp::RunAutomated; CWinApp::RunEmbedded; DllCanUnloadNow; DllGetClassObject; min

См. также

Другие ресурсы

Примеры MFC