На этом шаге мы рассмотрим отладку программ OLE 2.
Первая часть отладки приложения OLE 2 состоит в написании исходного текста и устранении всех ошибок и предупреждений при компиляции. В приложениях OLE 2 особенно важно избавиться от всех предупреждений, поскольку окружение OLE 2 очень критично к разного рода ошибкам.
Тестирование и отладка приложений OLE 2 намного сложнее, чем отладка обычных приложений для Windows. Во-первых, и это важнее всего, мы должны иметь возможность определить, где произошла ошибка - в сервере, контейнере или же, что крайне нежелательно, в них обоих. Там, где возможно, протестируйте контейнерные приложения на проверенных серверах (подобных Microsoft Word). Также следует тестировать серверы на заведомо корректно работающих контейнерах.
Borland поставляет вместе с Borland C++ версии 4.5 несколько примеров OLE-приложений. Эти продукты можно найти в каталоге Borland C++ версии 4.5 \BC45\EXAMPLES\OWL\OCF. В этом подкаталоге имеются еще несколько подкаталогов, которые описаны в таблице 1.
Дополнительно к приложениям, перечисленным в таблице 2, существует еще один каталог с примерами \BC45\EXAMPLES\OCF. В этом подкаталоге хранятся различные примеры программ, относящихся к OLE 2, некоторые из них приводятся в таблице 2. Основное отличие между примерами в этом каталоге и теми, что содержатся в подкаталоге \BC45\EXAMPLES\OWL\OCF, состоит в том, что в первых не используется OWL.
В отличие от большинства утилит Borland C++ версии 4.5, программы, перечисленные в таблице 2, перед запуском следует скомпилировать, поскольку они поставляются только в виде исходных текстов.
Если ваш сервер - автономная программа (имеется в виду, что сервер - не DLL), его можно протестировать как стандартное приложение для Windows с помощью обычных способов отладки. Функционирование сервера можно проверить, используя средства отладки Borland C++ версии 4.5. При отладке сервера в виде отдельного приложения можно начать процесс отладки связывания OLE.
Обычно отладка сервера выполняется внедрением его объектов в контейнерное приложение. Следует пользоваться заведомо работающими контейнерными приложениями, это ускорит процесс отладки.
Подкаталог | Описание |
---|---|
В этом каталоге — многодокументное приложение OLE. Эта программа содержится в двух исходных файлах и представляет собой пример OLE-приложения | |
В этом каталоге — однодокументное приложение OLE. Эта программа содержится в двух исходных файлах и представляет собой пример OLE-приложения. Программа SDIOLE немного проще, чем MDIOLE | |
В этом каталоге — простая игра "крестики-нолики". Это приложение содержится в единственном исходном файле, снабженном простым заголовочным файлом и файлом ресурсов. Сама игра очень проста (любой разумный компетентный игрок может или победить, если он ходит первым, или свести игру к ничьей, если ходит первым компьютер). Если вы проигнорируете используемую в игре стратегию, остальной код может осветить многие вопросы, относящиеся к написанию серверов OLE 2. Приложение игры в "крестики-нолики" не способно функционировать как контейнер. |
Подкаталог | Описание |
---|---|
Сервер автоматизации, выполняющий функции калькулятора с четырьмя действиями | |
Печатает список языков и их идентификаторов | |
Тестирует процесс регистрации и работы с реестром Windows. Программа REGTEST выполняет следующие тесты: Register (регистрация), Unregister (отмена регистрации), File write (запись в файл), Validate (проверка целостности), Compare (сравнение) и Display (отображение) |
Если сервер - не исполняемая программа (то есть DLL), его отладка сильно усложняется. Во-первых, сервер следует зарегистрировать. Без регистрации не стоит пробовать внедрять объект сервера в контейнер. После регистрации и внедрения можно пользоваться различными способами, которые обычно используются при отладке DLL. С самого начала процесса отладки следует учесть проблемы сложности OLE и процесс связывания OLE.
Сервер OLE 2 может находиться в двух состояниях. Первое состояние - когда объект сервера внедрен, но не активен. Пользователь видит объект, но не производит над ним никаких действий. Во втором состоянии пользователь манипулирует объектом. В этом случае объект активен, и с помощью редактирования по месту к меню контейнера добавляется меню сервера, в результате чего контейнер выглядит для пользователя сервером. Каждое из этих состояний можно отлаживать отдельно.
Лучше начинать с отладки активного состояния сервера. Заставив его работать корректно, вы можете поработать и над неактивным состоянием. Обычно большинство объектов OLE, находясь в неактивном состоянии, не выполняют никаких действий. Исключение составляют пользовательские элементы управления OLE, которые действительно могут обновлять область пользователя, даже если элемент управления неактивен.
Если объект сервера OLE 2 не активен, контейнер должен отобразить (или визуализировать) объект. Это может быть сделано несколькими способами, однако чаще всего сервер создает метафайл, который затем используется для отображения представления объектов. Другие методы могут заключаться в использовании битовых образов (файлов с расширениями .BMP или .DIB) или других формах отображения данных.
На следующем шаге мы познакомимся с понятием структурированного хранения .