Алекс Jenter - Программирование на Visual C++. Архив рассылки

Тут можно читать онлайн Алекс Jenter - Программирование на Visual C++. Архив рассылки - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование на Visual C++. Архив рассылки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.33/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Алекс Jenter - Программирование на Visual C++. Архив рассылки краткое содержание

Программирование на Visual C++. Архив рассылки - описание и краткое содержание, автор Алекс Jenter, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Программирование на Visual C++. Архив рассылки - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование на Visual C++. Архив рассылки - читать книгу онлайн бесплатно, автор Алекс Jenter
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Connection point подразумевает под собой соединение. Соединение состоит из 2 частей: из объекта, вызывающего интерфейс и называемого источником, и из объекта, содержащего реализацию этого интерфейса и называемого приемником. Устанавливая точку соединения, источник позволяет приемнику присоединиться к себе. С помощью механизма точки соединения (интерфейс IConnectionPoint) указатель на интерфейс приемника передается объекту источника. Этот указатель обеспечивает источнику доступ к функциям-членам реализации приемника. К примеру, для возбуждения события, реализованного приемником, источник может вызвать соответствующий метод из реализации приемника.

Часть 2. Создание COM-сервера

Программа-пример Server

Итак, давайте создадим внутризадачный COM-сервер (DLL), который будет предоставлять клиенту одну-единственную функцию, результатом работы которой будет возбуждение события. Для этого запустите Visual Studio и выберите меню File->New. Затем в появившемся диалоге выберите вкладку Projects и в поле имени проекта введите ту информацию, что указана на рисунке 2, а также в качестве используемого мастера выберите MFC AppWizard (dll).

Рисунок 2 Нажмите ОК и вы увидите следующий диалог рисунок 3 Поставьте - фото 6

Рисунок 2

Нажмите ОК и вы увидите следующий диалог (рисунок 3). Поставьте установки, как показано на рисунке, и не забудьте отметить птичкой опцию Automation. Это важно, т.к. лишь в этом случае мастер добавит к нашему проекту код, необходимый для COM-сервера.

Рисунок 3 Нажмите Finish Если вы сделали все правильно то в окне ClassView вы - фото 7

Рисунок 3

Нажмите Finish. Если вы сделали все правильно, то в окне ClassView вы должны увидеть ту же картину, что и на рисунке 4.

Рисунок 4 Итак что же нам создал мастер Он добавил минимальный джентльменский - фото 8

Рисунок 4

Итак, что же нам создал мастер? Он добавил минимальный джентльменский набор, который обеспечит существование скромному внутризадачному (DLL) COM-серверу. Это функции DllCanUnloadNow, DllGetClassObject и DllRegisterServer. Среди этих функций также должна находиться функция DllUnregisterServer, которая, на мой взгляд, также важна, как и DllRegisterServer, однако разработчики в Майкрософт почему-то так не считают. О том, как добавить в COM-сервер механизм unregistered, я расскажу в другой статье. Кроме того, в функцию InitInstance мастер добавил следующий код регистрации фабрики классов, за что ему и спасибо.

BOOL CPointServerApp::InitInstance() {

// Register all OLE server (factories) as running. This enables the

// OLE libraries to create objects from other applications.

COleObjectFactory::RegisterAll();

return TRUE;

}

Пожалуй, все? Нет, не все. Если вы посмотрите в файлы проекта, созданные мастером, то увидите среди них замечательный файл описания интерфейсов PointServer.odl, содержимое которого имеет вид:

// PointServer.odl : type library source for PointServer.dll

// This file will be processed by the MIDL compiler to produce the

// type library (PointServer.tlb).

[ uuid(D46238B8-2277-11D5-964D-00001CDC1022), version(1.0) ]

library PointServer {

importlib("stdole32.tlb");

importlib("stdole2.tlb");

//{{AFX_APPEND_ODL}}

//}}AFX_APPEND_ODL}}

};

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

Теперь добавим в наш сервер интерфейс, который будет содержать в себе один метод. Для этого выберите View->ClassWizard. В появившемся диалоге выберите вкладку Automation и нажмите Add Class->New. Появится диалог, изображенный на рисунке 5. Введите в необходимые поля информацию, указанную на рисунке.

Рисунок 5 Таким образом мы указываем мастеру что хотим добавить в наш сервер - фото 9

Рисунок 5

Таким образом, мы указываем мастеру, что хотим добавить в наш сервер объект, обработка событий которого будет происходить в классе CMyInterface, и что ProgId нашего интерфейса будет иметь имя (его потом можно будет использовать для идентификации интерфейса при его вызове, например, в БЕЙСИКе – это очень удобно).

Кроме того, обратите внимание на одну важную особенность! Наш класс является производным от класса CCmdTarget – это необходимо. Дело в том, что библиотека MFC реализует модель Connection point в классах CConnectionPoint и CCmdTarget. Классы, наследуемые от CСonnectionPoint, реализуют IConnectionPoint интерфейс, используемый для предоставления точек соединения другим объектам, а классы, наследуемые от CСmdTarget, реализуют IConnectionPointContainer интерфейс, который может перечислять все доступные точки соединения объекта или искать специфическую точку соединения. Вернитесь к началу статьи и прочитайте ещё раз определения терминов Connectable objectи Connection point object.

В нашем случае сервер предоставит клиенту входящий метод, который он будет вызывать, и в этом случае он будет являться источником для клиента. Но помимо этого, наш сервер будет содержать точку соединения, которая будет объявлена опять-таки в сервере, но реализация, которой будет находиться в клиенте. То есть наш сервер будет вызывать функцию, которая реализована у клиентского приложения, а потому он будет являться также и контейнером. Поэтому нам необходима поддержка класса CCmdTarget.

Ну, вот теперь жмите ОК.

Теперь в диалоге MFC ClassWizard, который, я надеюсь, вы ещё не закрыли, вам стала доступна кнопка Add Method. Жмите её и заполняйте предложенную вам форму данными, указанными на рисунке 6.

Рисунок 6 Здесь мы указываем мастеру что нам необходимо определить в нашем - фото 10

Рисунок 6

Здесь мы указываем мастеру, что нам необходимо определить в нашем интерфейсе функцию FireMyEvent без параметров. Эту функцию мы будем использовать с единственной целью – чтобы сгенерировать событие, которое вызовет исходящую функцию – собственно наш Connection point. Жмите ОК в этом диалоге, а затем и в диалоге MFC ClassWizard.

Смотрим, что получилось. На рисунке 7 видно, что в наш проект добавились новые классы.

Рисунок 7 Это класс CMyInterface и интерфейс IMyInterface Я не буду подробно - фото 11

Рисунок 7

Это класс CMyInterface и интерфейс IMyInterface. Я не буду подробно описывать те вещи, которые добавил мастер в ODL файл, а также в файл реализации класса CMyInterface, так как это предмет другого разговора. А мы сейчас пытаемся добавить поддержку точек соединения, и я предполагаю, что с подобными вещами вы уже знакомы.

Теперь нам нужно сгенерировать уникальный GUID. Он будет однозначно идентифицировать интерфейс, который мы собираемся описать в ODL-файле, и который будет содержать исходящий метод, что мы будем вызывать на клиентской стороне. Я для этого пользуюсь замечательной утилитой Guidgen.exe, которая поставляется вместе со студией. Итак, откройте ODL файл нашего проекта и сразу после директив импорта двух TLB-фалов, что любезно добавил туда мастер, вставьте следующее объявление интерфейса, не забывая при этом менять значения уникального идентификатора на свое значение.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Алекс Jenter читать все книги автора по порядку

Алекс Jenter - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование на Visual C++. Архив рассылки отзывы


Отзывы читателей о книге Программирование на Visual C++. Архив рассылки, автор: Алекс Jenter. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x