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 ++ и является объектно-ориентированным по дизайну.
Функции, предоставляемые Windows API, можно сгруппировать в восемь категорий:
win32k.sys
, который напрямую взаимодействует с графическим драйвером.Веб-браузер Internet Explorer (IE) также предоставляет множество API-интерфейсов, которые часто используется приложениями и может считаться частью Windows API. IE был включен в операционную систему начиная с Windows 95 OSR2 и предоставлял веб-сервисы приложениям с Windows 98. В частности, он используется для предоставления:
Классический Windows Multimedia API помещен в winmm.dll и содержит функции для воспроизведения звуковых файлов, отправки и получения MIDI-сообщений, для доступа к джойстикам и для облегчения всех других функций так называемой подсистемы MCI Windows, который происходит из мультимедийных расширений, доступных для Windows 3.0 отдельно и как неотъемлемая часть операционной системы, начиная с Windows 3.1, в то время они находились в mmsystem.dll.
Кроме того, как часть каждой Windows версии, начиная с Windows 95 OSR2, Microsoft предоставила DirectX API - слабо связанный набор графических и игровых сервисов, который включает:
Microsoft также предоставляет несколько API-интерфейсов для кодирования и воспроизведения мультимедиа:
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 внутри основной подпрограммы. Накладные расходы на связывание со стандартной библиотекой ввода-вывода также составляют только одну строку:
#includeint 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.
Проект 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.
В Викиучебнике есть книга по теме: Программирование Windows |