Опции поддержки разработчика в мастере проекта сервера ATL
Вкладка Developer Support Options (Опции поддержки разработчика) мастера проекта сервера ATL содержит три опции (см. рис.4.10).
Рис. 4.10. Параметры поддержки разработчика в мастере проекта сервера ATL
- Generate TODO Comments (Генерировать комментарии TODO). Добавляет в код комментарии, сообщающие разработчику о том, что необходимо сделать в рассматриваемой секции.
Примечание. Комментарии TODO – это инструкции о назначении рассматриваемого фрагмента кода, размещаемые в программе.
- Attributed Code (Код с атрибутами). Обеспечивает поддержку тегов атрибутов для указания вызовов функции.
- Custom Assert And Trace Handling Support (Поддержка особых опций отладки). Обеспечивает наличие глобально доступного экземпляра класса CDebugReportHook для фиксирования информации из макроса отладки ATL.
Опция Attributed Code (Код с атрибутами) размещает в DLL-библиотеке обработчика запросов уже знакомые нам обработчики тегов для связывания тегов, используемых в SRF-файлах, с ее функциями. В качестве примера рассмотрим демонстрационный метод hello world с кодом с атрибутами:
[ tag_name("Hello") ] HTTP_CODE OnHello(void) { m_HttpResponse << "Hello World!"; return HTTP_SUCCESS; }
Код без атрибутов поддерживает имена обработчиков тегов в SRF, связываемые с рассматриваемой функцией. Он используется макрос REPLACEMENT_METHOD_ENTRY для привязки имени тега к имени функции. Отказ от использования атрибутов предпочтителен при решении задачи о присвоении обработчиков тегов функциям в проектах с большим объемом кода. DLL-библиотека обработчика запросов не содержит путаницы тегов, присущей синтаксису тегов в виде скобок; все функции с тегами определяются в одном месте. В следующем листинге приведен фрагмент кода, использующий для функции OnHello обработчики тегов без атрибутов:
// TODO: Add additional tags to the replacement method map BEGIN_REPLACEMENT_METHOD_MAP(CNonAttributedCodeHandler) REPLACEMENT_METHOD_ENTRY("Hello", OnHello) END_REPLACEMENT_METHOD_MAP()
HTTP_CODE ValidateAndExchange() { // TODO: Put all initialization and validation code here
// Set the content-type m_HttpResponse.SetContentType("text/html");
return HTTP_SUCCESS; }
protected: // Here is an example of how to use //a replacement tag with the stencil processor HTTP_CODE OnHello(void) { m_HttpResponse << "Hello World!"; return HTTP_SUCCESS; }
Опция Custom Assert And Trace Hendling Support (Поддержка особых опций отладки) объявляет глобально доступный экземпляр класса CDebugReportHook в DLL-библиотеке расширения ISAPI. С помощью ATLTRACE и других макросов разработчик записывает код в DLL-библиотеку обработчика запросов, исполняемый только в процессе отладки, а также осуществляет вывод данных в программу, предназначенную для считывания каналов с именами типа WebDbg.exe. В следующем листинге объявление CDebugReportHook действительно только в том случае, если определен макрос _DEBUG:
// For custom assert and trace handling with WebDbg.exe #ifdef _DEBUG CDebugReportHook g_ReportHook; #endif