Windows API

редактировать
Основной набор интерфейсов программирования приложений Microsoft в Windows

Windows API, неофициально WinAPI, это основной набор Microsoft интерфейсов прикладного программирования (API), доступных в операционных системах Microsoft Windows. Название Windows API в совокупности относится к нескольким различным реализациям платформы, которые часто называются их собственными именами (например, Win32 API ); см. раздел версии. Почти все программы Windows взаимодействуют с Windows API. В линейке операционных систем Windows NT небольшое количество (например, программы, запущенные на ранней стадии процесса запуска Windows ) используют Native API.

Поддержка разработчиков доступна в форме комплект для разработки программного обеспечения, Microsoft Windows SDK, предоставляющий документацию и инструменты, необходимые для создания программного обеспечения на основе Windows API и связанных интерфейсов Windows.

Windows API (Win32) ориентирован в основном на язык программирования C в том смысле, что его открытые функции и структуры данных описаны на этом языке в последних версиях документации. Однако API может использоваться любым языком программирования компилятором или ассемблером, способным обрабатывать (четко определенные) низкоуровневые структуры данных вместе с предписанными соглашениями о вызовах для звонков и обратных вызовов. Точно так же внутренняя реализация функции API исторически разрабатывалась на нескольких языках. Несмотря на то, что C не является языком объектно-ориентированного программирования, Windows API и Windows исторически описывались как объектно-ориентированные. Также существует множество классов-оболочек и расширений (от Microsoft и других) для объектно-ориентированных языков, которые делают эту объектно-ориентированную структуру более явной (Microsoft Foundation Class Library (MFC), Visual Component Library (VCL), GDI + и т. Д.). Например, Windows 8 предоставляет Windows API и WinRT API, который реализован на C ++ и является объектно-ориентированным по дизайну.

Содержание
  • 1 Обзор
    • 1.1 Интернет
    • 1.2 Мультимедиа
    • 1.3 Взаимодействие с программой
    • 1.4 Библиотеки оболочек
  • 2 История
  • 3 Версии
  • 4 Другие реализации
  • 5 Поддержка компилятора
  • 6 См. Также
  • 7 Примечания
  • 8 Ссылки
  • 9 Внешние ссылки
Обзор

Функции, предоставляемые Windows API, можно сгруппировать в восемь категорий:

Базовые службы
Обеспечивает доступ к основным ресурсам, доступным для системы Windows. Включены такие вещи, как файловые системы, устройства, процессы, потоки и обработка ошибок. Эти функции находятся в файлах kernel.exe, krnl286.exeили krnl386.exeв 16-битной Windows и kernel32.dll и KernelBase.dllв 32- и 64-битной Windows. Эти файлы находятся в папке \ Windows \ System32во всех версиях Windows.
Дополнительные службы
Предоставляют доступ к функциям, выходящим за рамки ядра. Включены такие вещи, как реестр Windows, выключение / перезагрузка системы (или прерывание), запуск / остановка / создание службы Windows, управление учетными записями пользователей. Эти функции находятся в advapi32.dllи advapires32.dllв 32-битной Windows.
Интерфейс графического устройства
Предоставляет функции для вывода графического содержимого на мониторы, принтеры и другие устройства вывода. Он находится в gdi.exeв 16-битной Windows и в gdi32.dll в 32-битной Windows в пользовательском режиме. Поддержка GDI в режиме ядра обеспечивается win32k.sys, который напрямую взаимодействует с графическим драйвером.
Пользовательский интерфейс
Предоставляет функции для создания и управления экраном окнами и большинством базовые элементы управления, такие как кнопки и полосы прокрутки, принимают ввод с мыши и клавиатуры и другие функции, связанные с частью графического интерфейса пользователя (GUI) Windows. Этот функциональный модуль находится в user.exeв 16-битной Windows и в user32.dll в 32-битной Windows. Начиная с версий Windows XP, основные элементы управления находятся в comctl32.dllвместе с общими элементами управления (Common Control Library).
Common Dialog Box Library
Предоставляет приложениям стандартные диалоговые окна для открытия и сохранения файлов, выбора цвета и шрифта и т. Д. Библиотека находится в файле с именем commdlg.dllв 16-битной Windows, и comdlg32.dllв 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API.
Библиотека общих элементов управления
Предоставляет приложениям доступ к некоторым расширенным элементам управления, предоставляемым операционной системой. К ним относятся такие вещи, как строки состояния, индикаторы выполнения, панели инструментов и вкладки. Библиотека находится в файле библиотеки динамической компоновки (DLL) с именем commctrl.dllв 16-битной Windows и comctl32.dllв 32-битной Windows.. Он сгруппирован в категории пользовательского интерфейса API.
Windows Shell
Компонент Windows API позволяет приложениям получать доступ к функциям, предоставляемым оболочкой операционной системы, и изменить и улучшить его. Компонент находится в shell.dllв 16-битной Windows и в shell32.dllв 32-битной Windows. Функции облегченной служебной программы оболочки находятся в shlwapi.dll. Он сгруппирован в категории «Пользовательский интерфейс» API.
Сетевые службы
Предоставляют доступ к различным сетевым возможностям операционной системы. Его подкомпоненты включают NetBIOS, Winsock, NetDDE, удаленный вызов процедуры (RPC) и многие другие. Этот компонент находится в netapi32.dllв 32-битной Windows.

Web

Веб-браузер Internet Explorer (IE) также предоставляет множество API-интерфейсов, которые часто используется приложениями и может считаться частью Windows API. IE был включен в операционную систему начиная с Windows 95 OSR2 и предоставлял веб-сервисы приложениям с Windows 98. В частности, он используется для предоставления:

  • Встраиваемого элемента управления веб-браузера, содержащегося в shdocvw.dllи mshtml.dll .
  • Служба моникера URL, содержащаяся в urlmon.dll, который предоставляет COM-объекты приложениям для разрешения URL-адресов. Приложения также могут предоставлять свои собственные обработчики URL-адресов для использования другими.
  • Клиентская библиотека HTTP, которая также принимает во внимание общесистемные настройки прокси (wininet.dll); однако Microsoft добавила еще одну клиентскую библиотеку HTTP под названием winhttp.dll, которая меньше по размеру и больше подходит для некоторых приложений.
  • Библиотека для поддержки многоязычной и международной поддержки текста (mlang.dll).
  • DirectX Transforms, набор компонентов фильтра изображений.
  • Поддержка XML (компоненты MSXML, содержащиеся в msxml *.dll).
  • Доступ к адресным книгам Windows.

Мультимедиа

Классический Windows Multimedia API помещен в winmm.dll и содержит функции для воспроизведения звуковых файлов, отправки и получения MIDI-сообщений, для доступа к джойстикам и для облегчения всех других функций так называемой подсистемы MCI Windows, который происходит из мультимедийных расширений, доступных для Windows 3.0 отдельно и как неотъемлемая часть операционной системы, начиная с Windows 3.1, в то время они находились в mmsystem.dll.

Кроме того, как часть каждой Windows версии, начиная с Windows 95 OSR2, Microsoft предоставила DirectX API - слабо связанный набор графических и игровых сервисов, который включает:

  • Direct2D для 2D-векторной графики с аппаратным ускорением.
  • Direct3D для аппаратно-ускоренной 3D-графики.
  • DirectSound для низких доступ к звуковой карте с аппаратным ускорением.
  • DirectInput для связи с устройствами ввода, такими как джойстики и геймпады.
  • DirectPlay как многопользовательская игровая инфраструктура. Этот компонент устарел с DirectX 9, и Microsoft больше не рекомендует его использовать для разработки игр.
  • DirectDraw для 2D-графики в более ранних версиях DirectX, теперь устарел и заменен Direct2D.
  • WinG для 2D-графики в 16-битных играх, написанных для версий Windows 3.x. Не рекомендуется в версии Windows 95.

Microsoft также предоставляет несколько API-интерфейсов для кодирования и воспроизведения мультимедиа:

  • DirectShow, который создает и запускает универсальные конвейеры мультимедиа. Он сравним со средой GStreamer и часто используется для рендеринга игровых видео и создания медиаплееров (на нем основан Windows Media Player ). DirectShow больше не рекомендуется для разработки игр.
  • Media Foundation, новый API цифровых медиа, предназначенный для замены DirectShow.

Взаимодействие с программой

Windows API предназначен в основном для взаимодействия между операционная система и приложение. Для связи между различными приложениями Windows помимо основного Windows API Microsoft разработала ряд технологий. Это началось с динамического обмена данными (DDE), который был заменен на связывание и внедрение объектов (OLE), а затем на компонентную объектную модель (COM)., объекты автоматизации, элементы управления ActiveX и .NET Framework. Между этими технологиями не всегда существует четкое различие, и есть много общего.

Разнообразие терминов в основном является результатом группировки программных механизмов, относящихся к определенному аспекту разработки программного обеспечения. Автоматизация, в частности, относится к экспорту функции приложения или компонента (как интерфейс прикладного программирования (API)), чтобы им можно было управлять другими приложениями, а не только пользователями-людьми,.NET - это самостоятельный содержала общую методологию и технологию для разработки настольных и веб-приложений, написанных на различных языках, скомпилированных в режиме «точно в срок» (JIT).

Windows.pas - это модуль Pascal / Delphi, который содержит декларации API для Windows. Это эквивалент Pascal windows.h, используемый в C.

библиотеки оболочек

Различные обертки были разработаны Microsoft, которые взяли на себя некоторые функций более низкого уровня Windows API и позволял приложениям взаимодействовать с API более абстрактным образом. Библиотека классов Microsoft Foundation (MFC) обернула функциональность Windows API в C++ классы и, таким образом, обеспечивает более объектно-ориентированный способ взаимодействия с API. Библиотека активных шаблонов (ATL) - это шаблонная ориентированная оболочка для COM. Библиотека шаблонов Windows (WTL) была разработана как расширение ATL и задумана как меньшая альтернатива MFC.

Большинство фреймворков приложений для Windows (по крайней мере частично) обертывают Windows API. Таким образом, .NET Framework и Java, как и любые другие языки программирования в Windows, являются (или содержат) библиотеками-оболочками. Пакет кода Windows API для Microsoft.NET Framework - это библиотека-оболочка.NET для Windows API.

История

Windows API всегда открывал большую часть базовой структуры систем Windows для программисты. Это давало им большую гибкость и власть над своими приложениями, но также создавало большую ответственность за то, как приложения обрабатывают различные низкоуровневые, иногда утомительные, операции, связанные с графическим пользовательским интерфейсом.

Например, начинающий программист на C часто напишет простой «привет, мир» в качестве своего первого задания. Рабочая часть программы - это всего лишь одна строка printf внутри основной подпрограммы. Накладные расходы на связывание со стандартной библиотекой ввода-вывода также составляют только одну строку:

#include int main (void) {printf ("Hello, World! \ N"); }

Версия для Windows по-прежнему представляла собой только одну рабочую строку кода, но требовала намного больше дополнительных строк. Чарльз Петцольд, написавший несколько книг о программировании для Windows API, сказал: «Первоначальная программа hello world в Windows 1.0 SDK была немного скандалом. HELLO.C был около 150 строк, а в сценарии ресурса HELLO.RC было еще около 20 строк. (...) Опытные программисты часто свертывались клубочком от ужаса или смеха при встрече с программой Windows hello-world. "

С годами в системы Windows были внесены различные изменения и дополнения, и Windows API изменился и расширился, чтобы отразить это. Windows API для Windows 1.0 поддерживает менее 450 вызовов функций, тогда как современные версии Windows API поддерживают тысячи. Однако в целом интерфейс оставался довольно согласованным, и старое приложение Windows 1.0 по-прежнему будет казаться знакомым программисту, который привык к современному Windows API.

Microsoft сделала попытку сохранить в обратном направлении. совместимость. Для этого при разработке новых версий Windows Microsoft иногда применяла обходные пути, чтобы обеспечить совместимость со сторонним программным обеспечением, которое использовало предыдущую версию недокументированным или даже нежелательным образом. Рэймонд Чен, разработчик Microsoft, работающий над Windows API, сказал: «Я мог бы месяцами писать исключительно о плохих вещах, которые делают приложения, и о том, что нам нужно сделать, чтобы заставить их снова работать (часто в несмотря на себя). Вот почему я особенно злюсь, когда люди обвиняют Microsoft в злонамеренном взломе приложений при обновлении ОС. Если какое-либо приложение не запускалось в Windows 95, я воспринимал это как личный сбой ».

Один из самых больших изменений в Windows API был переход с Win16 (поставляется в Windows 3.1 и старше) на Win32 (Windows NT и Windows 95 и выше). Хотя Win32 был первоначально представлен в Windows NT 3.1 и Win32s позволял использовать подмножество Win32 до Windows 95, только в Windows 95 началось массовое портирование приложений на Win32. Чтобы облегчить переход, в Windows 95 для разработчиков вне и внутри Microsoft использовалась сложная схема API thunks, которая могла позволить 32-битному коду вызывать 16-битный код (для большинства API Win16) наоборот. Flat thunks позволяли 32-битному коду вызывать 16-битные библиотеки, и эта схема широко использовалась в библиотеках Windows 95, чтобы избежать переноса всей ОС на Win32 одним пакетом. В Windows NT операционная система была чисто 32-битной, за исключением частей для совместимости с 16-битными приложениями, и только общие преобразователи были доступны для преобразования из Win16 в Win32, как для Windows 95. Platform SDK поставлялся с компилятором, который мог производить код, необходимый для этих преобразователей. Версии 64-битной Windows также могут запускать 32-битные приложения через WoW64. Папка SysWOW64, расположенная в папке Windows на диске ОС, содержит несколько инструментов для поддержки 32-битных приложений.

Версии

Практически каждая новая версия Microsoft Windows содержит собственные дополнения и изменения. API Windows. Однако имя API оставалось неизменным для разных версий Windows, а изменения имен были ограничены основными архитектурными изменениями и изменениями платформы для Windows. В конечном итоге Microsoft изменила название нынешнего семейства API Win32 на Windows API и превратила его в универсальный термин как для прошлых, так и для будущих версий API.

  • Win16 - это API для первой, 16 -bit версии Microsoft Windows. Первоначально они назывались просто Windows API, но позже были переименованы в Win16, чтобы отличить их от более новой 32-разрядной версии Windows API. Функции Win16 API находятся в основном в основных файлах ОС: kernel.exe (или krnl286.exe или krnl386.exe), user.exe и gdi.exe. Несмотря на расширение файла для exe, на самом деле это библиотеки с динамической компоновкой.
  • Win32 - это 32-битный интерфейс прикладного программирования (API) для версий Windows начиная с 95. API состоит из функций, реализованных, как и в Win16, в системных библиотеках DLL. Основные библиотеки DLL Win32: kernel32.dll, user32.dll и gdi32.dll. Win32 был представлен в Windows NT. Версия Win32, поставляемая с Windows 95, первоначально называлась Win32c, где c означало совместимость. Позднее Microsoft отказалась от этого термина в пользу Win32.
  • Win32s - это расширение для семейства Windows 3.1x Microsoft Windows, в котором реализовано подмножество API Win32 для этих систем. «S» означает «подмножество».
  • Win64 - это вариант API, реализованный на 64-битной платформах архитектуры Windows <101.>(по состоянию на 2011 год x86-64 и IA-64 ). Как 32-битные, так и 64-битные версии приложения по-прежнему могут быть скомпилированы из одной кодовой базы , хотя некоторые старые API-интерфейсы устарели, а некоторые API-интерфейсы, которые уже были устаревшими в Win32, были удалены. Все указатели памяти по умолчанию 64-битные (модель LLP64 ), поэтому исходный код необходимо проверить на совместимость с 64-битной арифметикой указателя и переписать при необходимости.
  • WinCE - это реализация Windows API для операционной системы Windows CE.
Другие реализации

Проект Wine обеспечивает уровень совместимости Win32 API для Unix-подобных платформ, между API ядра Linux и программами, написанными для Windows API. ReactOS идет еще дальше и стремится реализовать полную операционную систему Windows, работая в тесном сотрудничестве с проектом Wine, чтобы способствовать повторному использованию кода и совместимости. DosWin32 и HX DOS Extender - это другие проекты, которые эмулируют Windows API, позволяя выполнять простые программы Windows из командной строки DOS. Odin - это проект для эмуляции Win32 на OS / 2, заменяющий исходную эмуляцию Win-OS / 2, основанную на коде Microsoft. Другие второстепенные реализации включают библиотеки MEWEL и Zinc, которые были предназначены для реализации подмножества Win16 API в DOS (см. Список платформенно-независимых библиотек GUI ).

Исходная среда интерфейса Windows (WISE) была программой лицензирования от Microsoft, которая позволяла разработчикам перекомпилировать и запускать приложения для Windows на платформах Unix и Macintosh. Пакеты WISE SDK были основаны на эмуляторе Windows API, который мог работать на этих платформах.

Усилия по стандартизации включали общедоступный интерфейс Windows (PWI) Sun для Win16 (см. Также: Приложение Sun Windows Двоичный интерфейс (Wabi )), Интерфейс прикладного программирования Willows Software для Windows (APIW) для Win16 и Win32 (см. Также: Willows TWIN ) и ECMA-234, в котором предпринята попытка обязательной стандартизации Windows API.

Поддержка компилятора

Для разработки программного обеспечения, использующего Windows API, компилятор должен иметь возможность использовать специфичные для Microsoft библиотеки DLL, перечисленные выше (COM-объекты находятся вне Win32 и предполагают определенный макет vtable). Компилятор должен либо обрабатывать файлы заголовков, которые раскрывают имена внутренних функций API, либо предоставлять такие файлы.

Для языка C ++ Zortech (позже Symantec, затем Digital Mars ), Watcom и Borland имеют все произвел хорошо известные коммерческие компиляторы, которые часто использовались с Win16, Win32s и Win32. Некоторые из них поставляли расширители памяти, позволяющие программам Win32 запускаться на Win16 с распространяемой DLL Win32s от Microsoft. Компилятор Zortech был, вероятно, одним из первых стабильных и удобных компиляторов C ++ для программирования Windows, до того как у Microsoft появился компилятор C ++.

Для определенных классов приложений система компиляции также должна иметь возможность обрабатывать файлы языка описания интерфейса (IDL). В совокупности эти предварительные требования (компиляторы, инструменты, библиотеки и заголовки) известны как Microsoft Platform SDK. Какое-то время интегрированная система разработки Microsoft Visual Studio и Borland была единственной интегрированной средой разработки (IDE), которая могла это обеспечить (хотя SDK можно бесплатно загрузить отдельно от всего пакета IDE из Microsoft Windows SDK для Windows 7 и.NET Framework 4 ).

По состоянию на 2016 год проекты MinGW и Cygwin также предоставляют такую ​​среду на основе GNU Compiler Collection (GCC), используя автономный набор файлов заголовков, чтобы упростить связывание с библиотеками DLL, специфичными для Win32. LCC-Win32 - компилятор C, поддерживаемый Джейкобом Навиа, бесплатное ПО для некоммерческого использования. - это бесплатный компилятор C, поддерживаемый Пелле Ориниус. Free Pascal - это бесплатное программное обеспечение компилятор Object Pascal, которое поддерживает Windows API. Пакет MASM32 представляет собой зрелый проект, обеспечивающий поддержку Windows API в Microsoft Macro Assembler (MASM) с использованием настраиваемых или преобразованных заголовков и библиотек из Platform SDK. Плоский ассемблер FASM позволяет создавать программы Windows без использования внешнего компоновщика, даже при работе в Linux.

Поддержка компилятора Windows также необходима для структурированной обработки исключений (SEH). Эта система служит двум целям: она обеспечивает основу, на которой может быть реализована зависящая от языка обработка исключений, и то, как ядро ​​уведомляет приложения об исключительных условиях, таких как разыменование недопустимого указателя или переполнение стека. Компиляторы Microsoft / Borland C ++ имели возможность использовать эту систему, как только она была представлена ​​в Windows 95 и NT, однако фактическая реализация была недокументирована и ее пришлось перепроектировать для проекта Wine и бесплатных компиляторов. SEH основан на размещении кадров обработчика исключений в стеке с последующим добавлением их в связанный список, хранящийся в локальном хранилище потока (первое поле блока среды потока). Когда генерируется исключение, ядро ​​и базовые библиотеки раскручивают обработчики стека и фильтруют по мере их обнаружения. В конце концов, каждое исключение, не обработанное приложением, будет обрабатываться обработчиком обратного останова по умолчанию, который вызывает диалоговое окно общего сбоя Windows.

См. Также
Notes
Ссылки
  1. Интерфейс программирования приложений Windows
Внешние ссылки
В Викиучебнике есть книга по теме: Программирование Windows
Последняя правка сделана 2021-06-21 10:43:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте