Регистрация
Когда пользователь хочет вставить элемент OLE в приложение, OLE представляет список типов объектов для выбора. OLE получает этот список из базы данных регистрации системы, которая содержит сведения, предоставляемые всеми серверными приложениями. Когда сервер регистрирует себя, записи, которые он помещает в базу данных регистрации системы (реестр), описывают каждый тип объекта, который он предоставляет, расширения файлов и путь к самому себе, среди других сведений.
Платформа и библиотеки динамической компоновки OLE используют этот реестр, чтобы определить, какие типы элементов OLE доступны в системе. Библиотеки DLL системы OLE также используют этот реестр для определения способа запуска серверного приложения при активации связанного или внедренного объекта.
В этой статье описывается, что каждое серверное приложение должно выполняться при установке и при каждом выполнении.
Подробные сведения о базе данных регистрации системы и формате REG-файлов, используемых для его обновления, см . в справочнике разработчика OLE.
Установка сервера
При первой установке серверного приложения он должен зарегистрировать все типы поддерживаемых элементов OLE. Кроме того, сервер может обновлять базу данных регистрации системы при каждом выполнении в качестве автономного приложения. При перемещении исполняемого файла сервера база данных регистрации обновляется.
Примечание.
Приложения MFC, созданные мастером приложений, автоматически регистрируются при запуске в качестве автономных приложений.
Если вы хотите зарегистрировать приложение во время установки, используйте программу RegEdit.exe. Если вы включаете программу установки в приложение, запустите программу установки RegEdit /S appname.reg. (Флаг /S указывает автоматическую операцию, то есть не отображает диалоговое окно, сообщающее об успешном завершении команды.) В противном случае указать пользователю запустить RegEdit вручную.
Примечание.
Reg-файл, созданный мастером приложений, не содержит полный путь к исполняемому файлу. Программа установки должна изменить REG-файл, чтобы включить полный путь к исполняемому файлу или изменить переменную среды PATH, чтобы включить каталог установки.
RegEdit объединяет содержимое текстового файла REG в базу данных регистрации. Чтобы проверить базу данных или восстановить ее, используйте редактор реестра. Старайтесь избегать удаления важных записей OLE.
Инициализация сервера
При создании серверного приложения с помощью мастера приложений мастер автоматически завершает все задачи инициализации. В этом разделе описывается, что необходимо сделать при написании серверного приложения вручную.
Когда серверное приложение запускается приложением-контейнером, библиотеки DLL системы OLE добавляют параметр "/Внедрение" в командную строку сервера. Поведение серверного приложения отличается в зависимости от того, был ли он запущен контейнером, поэтому первое, что должно сделать приложение при запуске выполнения, проверка для параметра "/Внедрение" или "Внедрение" в командной строке. Если этот параметр существует, загрузите другой набор ресурсов, показывающих сервер как активный или полностью открытый. Дополнительные сведения см. в меню и ресурсах: дополнения сервера.
Серверное приложение также должно вызвать ее CWinApp::RunEmbedded
функцию, чтобы проанализировать командную строку. Если он возвращает ненулевое значение, приложение не должно отображать его окно, так как оно было запущено из приложения контейнера, а не как автономное приложение. Эта функция обновляет запись сервера в базе данных регистрации системы и вызывает RegisterAll
функцию-член для вас, выполняя регистрацию экземпляра.
При запуске серверного приложения необходимо убедиться, что он может выполнять регистрацию экземпляров. Регистрация экземпляра сообщает библиотекам DLL системы OLE, что сервер активен и готов получать запросы от контейнеров. Он не добавляет запись в базу данных регистрации. Выполните регистрацию экземпляра сервера, вызвав функцию-член, определенную ConnectTemplate
COleTemplateServer
. При этом объект подключается CDocTemplate
к объекту COleTemplateServer
.
Функция ConnectTemplate
принимает три параметра: CLSID сервера, указатель на CDocTemplate
объект и флаг, указывающий, поддерживает ли сервер несколько экземпляров. Мини-сервер должен поддерживать несколько экземпляров, то есть для одновременного запуска нескольких экземпляров сервера по одному для каждого контейнера. Следовательно, передайте значение TRUE для этого флага при запуске мини-сервера.
Если вы пишете мини-сервер, по определению он всегда будет запускаться контейнером. Вы по-прежнему должны проанализировать командную строку, чтобы проверка для параметра "/Внедрение". Отсутствие этого параметра в командной строке означает, что пользователь пытался запустить мини-сервер как автономное приложение. Если это происходит, зарегистрируйте сервер в базе данных регистрации системы, а затем отобразите окно сообщения, информирующее пользователя о запуске мини-сервера из приложения контейнера.
См. также
OLE
Серверы
CWinApp::RunAutomated
CWinApp::RunEmbedded
Класс COleTemplateServer