Визуальное программирование и MFC

       

EXE-сервер автоматизации


Рассмотрим кратко процесс создания exe-сервера автоматизации без пользовательского интерфейса.

Сначала при помощи средства MFC AppWizard (exe) следует создать проект приложения SvrExe, основанного на диалоговой панели. При создании проекта необходимо включить отметку флажка “Automation” (для поддержки приложением автоматизации). В результате получится простейшее приложение OLE-автоматизации.

Затем необходимо удалить из проекта (и из каталога) файлы, относящиеся к диалоговой панели класса CSvrExeDlg – SvrExeDlg.h, SvrExeDlg.cpp, DlgProxy.h, DlgProxy.cpp. Из ресурсов приложения следует удалить шаблон диалоговой панели с идентификатором IDD_SVREXE_DIALOG.

Далее нужно изменить файл SvrExe.cpp (файл реализации класса приложения-сервера) следующим образом:

#include "stdafx.h" #include "SvrExe.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif BEGIN_MESSAGE_MAP(CSvrExeApp, CWinApp) //{{AFX_MSG_MAP(CSvrExeApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG END_MESSAGE_MAP() CSvrExeApp::CSvrExeApp() { } CSvrExeApp theApp; BOOL CSvrExeApp::InitInstance() { // Инициализация библиотек OLE if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } // Проверка командной строки – проверка на // запуск в качестве сервера автоматизации if (RunEmbedded() RunAutomated()) { // Регистрация всех фабрик OLE-сервера как выполняемых. // Это позволит OLE создавать объекты из других приложений. COleTemplateServer::RegisterAll(); // Приложение продолжает работу, так как запущено в // качестве сервера автоматизации return TRUE; } else { // Регистрация приложения качестве сервера COleObjectFactory::UpdateRegistryAll(); // Приложение запущено без параметров – прекращение работы return FALSE; } }

С помощью ClassWizard добавить в проект приложения SvrExe класс CSimpleMFC, в качестве базового для него указать класс CCmdTarget (класс, поддерживающий автоматизацию). Обязательно в группе “Automation” включить переключатель “Createable by type ID” и в качестве псевдонима ввести SvrExe.SimpleMFC . Созданный мастером ClassWizard класс CSimpleMFC и является С++ -классом COM-объекта SvrExe.SimpleMFC, реализующим его интерфейс IID_ISimpleMFC (он наследуется от интерфейса IDispatch).

При помощи вкладки “Automation” панели ClassWizard и кнопки “Add property…” для COM-объекта добавляются необходимые ему свойства. А с помощь вкладки “Automation” панели ClassWizard и кнопки “Add method…” в интерфейс COM-объекта добавляются метод автоматизации (например, метод afx_msg void Initialize (long initializer);).

Для регистрации приложения в качестве сервера автоматизации следует запустить откомпилированное и скомпанованное приложение на выполнение, не передавая ему при этом никаких параметров (созданный сервер является саморегистрирующимся). В этом случае сервер только регистрируется и на этом прекращает свою работу.



Содержание раздела