• СТАТЬЯ  Поиск в MSDN
  • ВОПРОС-ОТВЕТ  Как вызвать скрипт из приложения?
  • ФОРУМ RSDN – ИЗБРАННОЕ
  • Программирование на Visual C++

    Выпуск №56 от 2 декабря 2001 г.

    Здравствуйте, уважаемые подписчики! 

    СТАТЬЯ 

    Поиск в MSDN

    Автор: Александр Шаргин 

    MSDN – это библия Windows-разработчика. В ней содержится огромное количество важной и полезной информации по всем основным продуктам и технологиям фирмы Microsoft. Но когда информации накапливается слишком много, встаёт другая проблема – проблема поиска именно тех данных, которые требуются в данный момент. В этой статье мы поговорим о том, как искать нужную информацию в MSDN. 

    ПРИМЕЧАНИЕ

    Далее речь пойдёт о той версии MSDN, которая распространяется на дисках и используется в качестве хелпа в среде разработки Visual C++. Тем не менее, некоторые рекомендации можно с успехом применять при поиске в Интернете на сайте MSDN Online.

    Вкладка Search

    Базовым инструментом для поиска информации в MSDN служит вкладка Search навигационной панели. Посмотрим, какие средства она нам предоставляет.

    Вкладка Search


    В верхней части вкладки Search находится поле ввода "Type in word(s) to search for". Оно позволяет вводить и выполнять запросы на поиск информации. Искать можно в статьях MSDN, в заголовках статей (флажок "Search titles only") или в статьях, найденных по предыдущему поисковому запросу (флажок "Search previous results"). Чтобы выполнить запрос, нажмите Enter (или щёлкните по кнопке "List Topics"). Появится список статей, удовлетворяющих запросу. Перейти к любой статье в списке можно, дважды щёлкнув по ней левой клавишей мыши. Можно также выделить нужную статью и щёлкнуть по кнопке "Display". Для удобства список статей можно сортировать по названию, разделу или рангу (то есть по степени соответствия запросу). Для этого нужно щёлкнуть по заголовку соответствующего столбца списка.

    СОВЕТ

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

    Синтаксис запросов

    В простейшем случае запрос может состоять из одного-единственного слова. Результатом будет список статей, в которых это слово встречается. При поиске не учитывается регистр букв, поэтому запросы "style", "STYLE" и даже "StYlE" дадут одинаковый результат. Слова, которые вы вводите, могут состоять из любых букв и цифр. Использовать знаки препинания допускается, но они игнорируются при поиске.

    Введённое вами слово разыскивается именно в той грамматической форме, в которой вы его набрали. Если вы хотите, чтобы учитывались все возможные формы слова, установите флажок "Match similar words" в нижней части вкладки Search. Если установить этот флажок, то по запросу "develop" будут также обнаружены статьи со словами "developed", "developer" и даже "development".

    Можно искать в MSDN не только фиксированное слово, но и фиксированную фразу. Для этого фразу нужно заключить в двойные кавычки. Как и в случае с отдельными словами, можно использовать флажок "Match similar words" для поиска фразы во всех возможный грамматических формах. Если установить этот флажок, то запрос "create dialog" отыщет также статьи с фразами "creating dialog", "created dialog", "create dialogs" и т. п.

    В словах можно использовать специальные символы "*" и "?". Они имеют тот же смысл, что и в командном языке Windows: "?" обозначает одну произвольную букву, а "*" – любую последовательность букв. Например, вы можете быстро найти все статьи, в которых рассказывается об уведомлениях элемента ListView, задав запрос "LVN_*".

    Для более тонкого отбора нужных статей используются операторы AND, OR, NOT и NEAR. Они вводятся прямо с клавиатуры или из меню, которое появляется при щелчке на стрелочке, расположенной справа от окна с запросом.

    ПРЕДУПРЕЖДЕНИЕ

    Операторы AND, OR и NOT нельзя заменять на позаимствованные из языка C символы &, | и !. Хотя в документации утверждается, что это допустимо, ваши запросы не будут работать.

    С помощью операторов можно связывать как отдельные слова, так и заключённые в кавычки фиксированные фразы. Операторы AND, OR и NOT имеют стандартный смысл "И", "ИЛИ" и "НЕ", а оператор NEAR означает, что связанные им слова (фразы) должны находиться недалеко (в пределах 8 слов) друг от друга. Например, можно задать запрос "debug NEAR release NEAR build" для поиска статей об отличиях отладочной и финальной версии программы в Visual C++. Если вы опускаете оператор между словами, считается, что это оператор AND.

    СОВЕТ

    Обратите особое внимание на оператор NEAR. В MSDN содержатся десятки тысяч статей, многие из них очень большие. Даже если вы объедините несколько слов оператором AND, они могут встретиться в статье, которая совершенно не относится к интересующей вас теме. Использование NEAR существенно повышает вероятность найти именно то, что вам нужно.

    Запросы с операторами всегда читаются слева направо. Никаких приоритетов для операторов не вводится. Чтобы изменить порядок обработки запроса, можно использовать круглые скобки.

    Подсветка результатов поиска

    Чтобы определить, насколько найденные статьи соответствуют нашим нуждам, часто бывает удобно включить подсветку слов или фраз, которые совпали с нашим запросом. Для этого нужно установить галочку Highlights в меню View.

    Подмножества

    MSDN часто ругают за то, что в ней вся информация свалена в кучу. Похожие функции есть и в Win32 API, и в MFC, и в Java, и в VB… Попробуйте ввести в индексе функцию типа "print", и вы поймёте, что я имею в виду. К счастью, нас никто не заставляет работать с библиотекой MSDN целиком. Вы можете определить в ней некоторое подмножество разделов, с которым будут работать оглавление, индекс и поиск. Используя подмножества, вы можете существенно сузить круг поиска нужной информации и быстрее найти то, что вам нужно.

    Подмножество задаётся в выпадающем списке "Active Subset" в самой верхней части навигационной панели MSDN. Пункт "(Entire Collection)" соответствует всей библиотеке целиком. Кроме этого, в MSDN обычно присутствует несколько удобных предопределённых подмножеств, которыми вы можете воспользоваться. Например, подмножество "MSDN, Knowledge Base" ограничивает круги ваших поисков Базой Знаний фирмы Microsoft (о ней мы подробно поговорим в следующем разделе). А подмножество "Visual C++, Platform SDK, and Enterprise Docs" должно понравится разработчику на языке C++, так как содержит документацию на сам язык C++ и его стандартную библиотеку, среду Visual C++, Win32 API и библиотеки MFC и ATL.

    Если предопределённых подмножеств недостаточно, всегда можно определить свои собственные. Для этого предназначен пункт меню "View→Define Subset…" (определить подмножество).

    Диалог Define Subset


    В открывшемся диалоге "Define Subset" вы увидите два дерева. В правом показаны разделы, принадлежащие подмножеству, а в левом – не входящие в него. Раскрывать и сворачивать подразделы можно двойным щелчком левой клавиши мыши. Для перемещения разделов в подмножество и из него используйте кнопки Add, Add All, Remove и Remove All. Из списка "Select subset to display" выбирается подмножество, которое вы будете редактировать (по умолчанию выбирается "New" – новое подмножество). Здесь же можно удалить ненужное подмножество, выбрав его из списка и нажав Delete. Если вы создали новое подмножество, не забудьте назначить ему название в поле "Save new subset as" и сохранить его, нажав Save.

    Поиск в Базе Знаний

    База Знаний (Knowledge Base, KB) – это огромная коллекция технических документов. Эти документы дополняют документацию, описывая решения конкретных проблем, которые могут возникнуть у пользователя или программиста. В Базе Знаний содержатся ответы на многие вопросы, нужно только найти их там.

    Каждая статья в KB содержит несколько специальных ключевых слов, которые её довольно точно классифицируют. Все эти слова начинаются с префикса kb. Задавая одно или несколько таких ключевых слов в поисковом запросе, можно вычленить из Базы именно те статьи, которые вам требуются. Список основных ключевых слов приведён в последующих разделах.

    Категории статей

    Каждая статья в Базе Знаний относится к одной из следующих категорий:

    • HOWTO. Статья описывает решение какой-либо задачи по шагам.

    • INFO. В статье содержится дополнительная информация по продуктам или технологиям фирмы Микрософт, которая не вошла в официальную документацию.

    • PRB. В статье описывается проблема, с которой вы можете столкнуться, и пути её обхода.

    • BUG. В статье задокументирован баг в продукте или технологии фирмы Микрософт.

    • FIX. Статья описывает баг, который присутствовал в предыдущей версии продукта или технологии, но исправлен в текущей версии.

    • SAMPLE. Законченная демонстрационная программа.

    • FAQ. Ответ на часто задаваемый вопрос.

    • DOC. Поправки или дополнения к официальной документации на продукты и технологии фирмы Микрософт.

    Если вы ищете в Базе Знаний статьи определённой категории (категорий), вы можете использовать в запросе специальные ключевые слова.

    Категория Ключевое слово
    HOWTO kbHOWTO
    INFO kbINFO
    PRB kbPRB
    BUG kbBUG
    FIX kbFIX
    SAMPLE kbSAMPLE
    FAQ kbFAQ
    DOC kbDOC
    Тематика

    Ключевые слова, связанные с тематикой, можно комбинировать с ключевыми словами, соответствующими конкретным технологиям. Это позволит получить результаты, более точно соответствующие вашим нуждам. Например, если вас интересует безопасность в ASP, вы можете задать запрос "kbASP kbSecurity". Если вас интересует отладка DLL, используйте запрос "kbDLL kbDebug". И так далее.

    Тематика Ключевое слово
    Отладка kbDebug
    Сообщения об ошибках kbErrMsg
    Скриптовые языки kbScript
    Незаконченные фрагменты кода (code snippets) kbCodeSnippet
    Использование визардов kbwizard
    Безопасность kbSecurity
    Производительность kbPerformance
    Масштабируемость kbScalability
    Развёртывание приложений kbDeployment
    Локализация kbLocalization
    Аппаратные платформы
    Тема Ключевое слово
    Платформа Intel x86 kbx86
    Эмуляция Intel x86 kbEmulatex86
    DEC Alpha kbDecAlpha
    Компьютеры Macintosh kbMAC
    Платформы на базе чипов MIPS kbMIPS
    Процессоры PowerPC kbPowerPC
    Процессоры Hitachi SuperH kbSuperH
    Операционные системы
    Тема Ключевое слово
    Всё семейство ОС Windows kbOSWin, kbWinOS
    ОС Windows NT kbNTOS
    ОС Windows NT 4.0 kbNTOS400
    ОС Windows 2000 kbWinOS2000
    ОС Windows 95 kbWinOS95
    ОС Windows 98 kbWinOS98
    ОС Windows CE kbWinCE
    Unix kbOSUNIX, kbUNIX
    Язык C++ и компилятор фирмы Microsoft
    Тема Ключевое слово
    Только язык C (без C++) kbConly
    Только язык C++ kbCPPonly
    Синтаксис языка C kbLangC
    Синтаксис языка C++ kbLangCPP
    Библиотека C run-time (CRT) kbCRT
    Обработка исключений в C++ kbExceptHandCPP
    Шаблоны kbtemplate
    Standard Template Library (STL) kbSTL
    Код, генерируемый компилятором kbCodeGen
    Компилятор kbCompiler
    Линкер kbLinker
    Утилита Nmake kbNMake
    Интегрированная среда разработки
    Тема Ключевое слово
    Общие
    Visual Studio (все версии) kbVS
    Visual Studio 97 kbVS97
    Visual Studio 6.0 kbVS600
    Среда разработки Developer Studio kbDevStudio
    Интегрированная среда разработки (IDE) kbIDE
    Visual C++
    Visual C++ kbVC
    Visual C++, версия 6.0 kbVC600
    Объектная модель Visual C++ kbVCObj
    Редактор кода kbEditor
    Редактор ресурсов kbResourceEd
    ClassViewer в Visual C++ kbClassView
    Class Wizard kbClassWizard
    Галерея компонентов (Component Gallery) kbCompGallery
    Создание собственных визардов kbCustomWizard
    Другие среды
    Visual Basic kbVBp
    Visual Fox Pro kbVFP
    Visual InterDev kbVisID
    Visual Source Safe kbSSafe
    Инструментарий
    Тема Ключевое слово
    Различные инструменты kbMiscTools
    Инструменты для анализа производительности kbPerformanceTool
    Продукты, поставляемые в составе Platform SDK kbSDKPlatform
    Windows Kernel Debugger (WinDBG.EXE) kbWinDBG
    isual Analyzer kbVisAnalyzer
    Инсталляция
    Тема Ключевое слово
    Инсталляция приложений на компьютер пользователя kbAppSetup
    Проблемы с установкой приложений фирмы Микрософт kbSetup
    Microsoft Windows Installer (MSI) kbMSI
    Microsoft Windows Installer, версия 1.0 kbMSI100
    Microsoft Windows Installer, версия 1.1 kbMSI110
    isual Studio Installer kbVSI
    Win32 API
    Тема Ключевое слово
    Весь Application Programming Interface (API) kbAPI
    Структурная обработка исключений в Win32 kbExceptHandSEH
    Реестр kbRegistry
    Многопоточность kbThread
    Динамически подключаемые библиотеки (DLL) kbDLL
    Программирование сервисов kbService
    Буфер обмена kbClipboard
    Файловый ввод/вывод kbFileIO
    Работа со строками и строковыми ресурсами kbString
    Дата и время kbDateTime
    Консоль управления фирмы Микрософт (Microsoft Management Console, MMC) kbMMC
    Система помощи в старом формате (WinHelp) kbWinHelp
    Система помощи на базе HTML kbHTMLHelp
    Общие контролы Windows kbCmnCtrls
    Стандартные диалоги kbCmnDlg
    Создание и использование диалоговых окон kbDlg
    Работа с меню kbMenu
    Программирование акселераторов ("горячих клавиш") kbKeyAccel
    Программирование Drag and Drop kbDragDrop
    Графика средствами GDI kbGDI
    Печать kbPrinting
    Сокеты kbWinsock
    COM/DCOM, COM+
    Тема Ключевое слово
    Модель COM/DCOM
    Вся Component Object Model (COM) kbCOMt
    Distributed COM (DCOM) kbDCOM
    ODL-файлы kbODL
    IDL-файлы kbIDL
    Компилятор MIDL kbMIDL
    Внутрипроцессные COM-серверы kbInprocSvr
    Локальные COM-серверы kbLocalSvr
    Маршалинг kbMarshal
    Лицензирование kbLicensing
    Точки соединения (Connection Points) kbConnPts
    Подразделения kbApartment
    Технологии OLE и ActiveX
    Вся технология Object Linking and Embedding (OLE) kbOLE
    Все технологии ActiveX kbActiveX
    Длительное хранение (persistent storage) в OLE kbPersistSt
    Интерфейс IDataObject kbDataObject
    События kbActiveXEvents
    Составные документы (compound documents) kbCmpDoc
    Контейнеры OLE kbContainer
    Активизация "по месту" (inplace activation) kbInplaceAct
    Активные документы (active documents) kbActiveDocs
    Автоматизация приложений kbAutomation
    ActiveX-контролы (создание и использование) kbCtrl
    ActiveX-контролы (только создание) kbCtrlCreate
    COM+ и MTS
    Весь COM+ kbCOMPLus
    Microsoft Transaction Server (MTS) kbMTS
    Асинхронные вызовы COM+ kbCOMPlusAsync
    Контексты COM+ kbCOMPlusContext
    События COM+ kbCOMPlusLCE
    Базы данных
    Тема Ключевое слово
    Все статьи, посвящённые базам данных kbDatabase
    Microsoft Data Access Components (MDAC) kbMDAC
    Open Database Connectivity (ODBC) kbODBC
    Java Database Connectivity (JDBC) kbJDBC
    Data Access Objects (DAO) kbDAO
    Data Access Object SDK kbSDKDAO
    Ядро JET kbJET
    Remote Data Objects (RDO) kbRDO
    Remote Data Service (RDS) kbRDS
    OLE Database Interface (OLEDB) kbOLEDB
    OLEDB-потребители kbConsumer
    OLEDB-провайдеры kbProvider
    Простой OLE DB-провайдер kbOSP
    ActiveX Data Objects (ADO) kbADO
    Microsoft SQL Server kbSQLServ
    Отладчик T-SQL kbTSQL
    Продукты и технологии Oracle kbOracle
    Exchange kbXchge
    Installable ISAM kbIISAM
    Технологии и формат dBASE kbDBase
    Excel kbExcel
    Access kbAccess
    Создание и распространение драйверов для баз данных kbDriver
    Интернет
    Тема Ключевое слово
    Active Server Pages (ASP) kbASP
    XML kbXML
    Парсер MSMXL (все версии) kbMSXML
    Парсер MSMXL, версия 2.0 kbMSXML200
    Парсер MSMXL, версия 3.0 kbMSXML300
    Internet Service API (ISAPI) kbISAPI
    Веб-серверы kbWebServer
    Cookies kbCookies
    MFC
    Тема Ключевое слово
    Вся библиотека Microsoft Foundation Classes (MFC) kbMFC
    Архитектура документ/представление kbDocView
    Многодокументный интерфейс (Multiple Document Interface, MDI) kbMDI
    Классы MFC, произведённые от CControlBar kbMFCCtrlBar
    Контекстно-зависимая справка kbCSHelp
    Программирование панелей инструментов kbToolbar
    Разработка пользовательского интерфейса kbUIDesign
    Обработка исключений в MFC kbExceptHandMFC
    ATL
    Тема Ключевое слово
    Active Template Library (ATL) kbATL
    Ver. 1.1 Active Template Library, версия 1.1 kbATL110
    Ver. 2.0 Active Template Library, версия 2.0 kbATL200
    Ver. 2.1 Active Template Library, версия 2.1 kbATL210
    Ver. 3.0 Active Template Library, версия 3.0 kbATL300
    Поддержка окон в ATL kbATLWC
    Провайдеры и потребители в ATL kbDTL
    Прочее
    Тема Ключевое слово
    Статьи, написанные группами технической поддержки Микрософт kbDSupport
    Общая информация, не относящаяся к программированию kbGenInfo
    Взаимодействие с MSDN kbMSDN
    Компоненты и драйверы третьих фирм kb3rdparty 

    ВОПРОС-ОТВЕТ 

    Как вызвать скрипт из приложения?

    Автор: Тимофей Чадов

    При использовании WebBrowser Вы можете вызывать любые скрипты, расположенные в теле html-страницы. Обращение к скриптам производится через диспетчерский интерфейс, возвращаемый в свойстве Script интерфейса IHTMLDocument.

    В следующем примере демонстрируется вызов функции с именем evalute, которая определена в теле html-страницы следующим образом.

    <SCRIPT>

     function evaluate(x) {

      alert(x + "= " + eval(x));

     }

    </SCRIPT>


    // Эта функция выполняет скрипт

    void CMyHtmlView::OnCallscript() {

     HRESULT hr;

     LPDISPATCH pDispatch = GetHtmlDocument();

     if (pDispatch == NULL) return;

     IHTMLDocument* pHtmlDoc;

     hr = pDispatch->QueryInterface(__uuidof(IHTMLDocument), (void**)&pHtmlDoc);

     LPDISPATCH pScript;

     pHtmlDoc->get_Script(&pScript);

     pScript->AddRef();

     if (SUCCEEDED(hr)) {

      // Получаем DISPID интересуемой функции

      OLECHAR* szMember = L"evaluate";

      DISPID dispid;

      HRESULT hr = pScript->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);

      if (SUCCEEDED(hr)) {

       // Выполняем

       COleVariant vtResult;

       static BYTE parms[] = VTS_BSTR;

       COleDispatchDriver dispDriver(pScript);

       dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT, (void*)&vtResult, parms, "5+Math.sin(9)");

      }

     }

     pScript->Realease();

     pHtmlDoc->Release();

     pDispatch->Release();

    }

    ФОРУМ RSDN – ИЗБРАННОЕ

    Тема: Коллеги, улыбнитесь

    (От: adonz)

    …В продолжение темы: 

    • Главная программа – функции malloc: Прошу обеспечить выделение 257 килобайт Conventional Memory.

    • Функция malloc – операционной системе: Прошу выделить 257 килобайт Conventional Memory в связи с производственной необходимостью.

    • Операционная система – главной пpограмме: Выделить 257 килобайт Conventional Memory не представляется возможным в связи с отсутствием таковых. Есть 3 мега Extended. Берете?

    • Главная программа – обработчику исключений: С памятью облом. Что делать будем?

    • Обработчик исключений – процедуре оптимизации: Необходимо добиться экономии памяти за счет более pационального использования системных ресурсов.

    • Контроллер прерываний – обработчику прерываний: Тут это… юзер кнопку нажал…

    • Главная программа – обработчику прерываний: Hе дергайся! Подержит и отпустит.

    • Процедуpа оптимизации – обработчику исключений: Готово!

    • Главная программа – обработчику исключений: Ну что там?

    • Обработчик исключений – главной программе: Еще хуже стало. Может, на диск посвопимся?

    • Главная программа – жесткому диску: Прошу принять на хpанение swap-файл в размере 257 килобайт.

    • Жесткий диск – главной программе: Ваша просьба не может быть удовлетворена за недостатком места.

    • Главная программа – опеpационной системе: Что еще за глюк? Было же место!

    • Жесткий диск – главной программе: Ничего не глюк. Вы еще прошлый swap-файл на 4 мега не забрали. А я, между пpочим, не резиновый. И даже не stacker'ный.

    • Контроллер прерываний – обработчику прерываний: Тут это… юзер опять кнопку давит…

    • Обработчик прерываний – PC speaker'у: Hу скажи ему что-нибудь, пусть отвяжется!

    • PC speaker – юзеру: Биип!

    • Главная программа – операционной системе: Ну может можно чего-нибудь перераспределить?

    • Операционная система – главной программе: Другим задачам тоже память нужна. Вам что, General Protection Error схлопотать охота?

    • Главная программа – хакерской функции: Ну-ка выясни, кто там отожрал всю память, и выкини их к XTшной матеpи!

    • Контроллер прерываний – обработчику прерываний: Тут юзер Ctrl-Alt-Del жмет!

    • Главная программа – обработчику прерываний: Да отруби ты этому зануде клавиатуpу! Мы тут делом заняты…

    • Хакерская функция – главной программе: Опаньки!

    • Главная программа – операционной системе: Ну что там? Сколько памяти свободно?

    • Операционная система – главной программе: 320 Conventional и… ой, куда это Extended Memory Manager делся?

    • Главная программа – хакерской функции: Ты что начистила, сволочь?

    • Хакерская функция – главной программе: А чо я, чо я? Мне сказали – выкинуть, я и выкидываю!

    • Функция malloc – операционной системе: Прошу выделить 257 килобайт Conventional Memory в связи с производственной необходимостью.

    • Операционная система – главной программе: Не могу. У меня в Extended Memory важные данные лежали. И вообще, я с вами скоро повешусь!

    • Кнопка Reset – процессору: Ну что? Доигрались?


    … ХОЛОДHЫЙ РЕСТАРТ…


    • Autoexec.bat – главной программе: Так на чем мы остановились?


    Это все на сегодня. Пока! 

    (Алекс Jenter jenter@rsdn.ru) (Duisburg, 2001. Публикуемые в рассылке материалы принадлежат сайту RSDN. )





     

    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх