Jump to content

Windows API

(Перенаправлено с Win16 )

Windows API
Разработчик(и) Майкрософт
Первоначальный выпуск 20 ноября 1985 г .; 38 лет назад ( 1985-11-20 )
Операционная система Microsoft Windows , ОС/2
Предшественник ДВА API
Тип API
Лицензия Собственный
Веб-сайт https://learn.microsoft.com/en-us/windows/apps/

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

Каждая основная версия Windows API имеет другое имя, которое определяет аспект совместимости этой версии. Например, Win32 — это основная версия Windows API, работающая в 32-битных системах. Название Windows API в совокупности относится ко всем версиям этой возможности Windows.

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

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

Базовые услуги
Предоставляет доступ к основным ресурсам, доступным системе Windows. Включены такие вещи, как файловые системы , устройства , процессы , потоки и обработка ошибок . Эти функции находятся в ядро.exe , krnl286.exe или krnl386.exe файлы в 16-битной Windows и kernel32.dll и KernelBase.dll в 32 и 64 битной Windows. Эти файлы находятся в папке \Windows\System32 во всех версиях Windows. [2]
Расширенные услуги
Обеспечивает доступ к функциям за пределами ядра. Включены такие вещи, как реестр Windows , выключение/перезапуск системы (или ее прерывание), запуск/остановка/создание службы Windows , управление учетными записями пользователей. Эти функции находятся в advapi32.dll и advapires32.dll в 32-битной Windows.
Интерфейс графического устройства
Предоставляет функции для вывода графического содержимого на мониторы , принтеры и другие устройства вывода . Он находится в gdi.exe в 16-битной Windows и gdi32.dll в 32-битной Windows в пользовательском режиме. Поддержка GDI в режиме ядра обеспечивается win32k.sys который напрямую взаимодействует с графическим драйвером. [3] [4]
Пользовательский интерфейс
Предоставляет функции для создания и управления экранными окнами и большинством основных элементов управления, таких как кнопки и полосы прокрутки , получение ввода с помощью мыши и клавиатуры, а также другие функции, связанные с частью графического пользовательского интерфейса (GUI) Windows. Этот функциональный блок находится в пользователь.exe в 16-битной Windows и user32.dll в 32-битной Windows. Начиная с версий Windows XP , основные элементы управления находятся в comctl32.dll , вместе с общими элементами управления (Common Control Library). [5]
Библиотека общих диалоговых окон
Предоставляет приложениям стандартные диалоговые окна для открытия и сохранения файлов, выбора цвета и шрифта и т. д. Библиотека находится в файле с именем commdlg.dll в 16-битной Windows и comdlg32.dll в 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API. [6]
Общая библиотека управления
Предоставляет приложениям доступ к некоторым расширенным элементам управления, предоставляемым операционной системой. К ним относятся такие элементы, как строки состояния , индикаторы выполнения , панели инструментов и вкладки . Библиотека находится в файле библиотеки динамической компоновки (DLL) с именем commctrl.dll в 16-битной Windows и comctl32.dll в 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API. [7]
Оболочка Windows
Компонент Windows API позволяет приложениям получать доступ к функциям, предоставляемым оболочкой операционной системы , а также изменять и расширять ее. Компонент находится в оболочка.dll в 16-битной Windows и Shell32.dll в 32-битной Windows. Упрощенные служебные функции Shell находятся в shlwapi.dll . Он сгруппирован в категории «Пользовательский интерфейс» API. [8] [9]
Сетевые службы
Предоставьте доступ к различным сетевым возможностям операционной системы. Его подкомпоненты включают NetBIOS , Winsock , NetDDE , удаленный вызов процедур (RPC) и многие другие. Этот компонент находится в netapi32.dll в 32-битной Windows. [10]
Интернет
Веб-браузер Internet Explorer (IE) также предоставляет множество API-интерфейсов, которые часто используются приложениями и поэтому могут считаться частью Windows API. IE был включен в операционную систему начиная с Windows 95 OSR2 и предоставлял веб-службы приложениям, начиная с Windows 98 . [11] В частности, он используется для обеспечения:
  • Встраиваемый элемент управления веб-браузером, содержащийся в 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 API определен на языке программирования C. [12] Его функции и структуры данных определены в синтаксисе C (см. windows.h ). Однако API можно использовать с помощью любого языка программирования, который может взаимодействовать со структурами данных API и соглашениями о вызовах для вызовов функций и обратных вызовов .

Следует отметить, что внутренняя реализация функций API была разработана на нескольких языках, кроме C. [а]

Несмотря на то, что C не является языком объектно-ориентированного программирования (ООП), Windows API в некоторой степени объектно-ориентирован из-за использования дескрипторов. Различные другие технологии Microsoft и других компаний делают этот объектно-ориентированный аспект более очевидным за счет использования языка ООП, такого как C++ — см. Библиотеку классов Microsoft Foundation (MFC), Библиотеку визуальных компонентов (VCL), GDI+ . Следует отметить, что Windows 8 предоставляет Windows API и WinRT API, реализованные на C++. [13] и является объектно-ориентированным по своей конструкции. [13]

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

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

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

[ редактировать ]

Многие технологии Microsoft используют Windows API, как и большинство программ, работающих в Windows. Будучи промежуточным программным обеспечением между Windows API и приложением, эти технологии обеспечивают некоторый доступ к Windows API. Некоторые технологии описываются как оболочка Windows API, но это спорно, поскольку ни одна другая технология не предоставляет и не раскрывает все возможности Windows API.

Хотя почти все программы Windows используют Windows API, в линейке операционных систем Windows NT программы, которые запускаются на ранних этапах процесса запуска Windows, вместо этого используют Native API . [15]

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

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

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
}

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

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

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

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

Основные версии

[ редактировать ]

Каждая версия Microsoft Windows содержит версию Windows API, и почти каждая новая версия Microsoft Windows содержит дополнения и изменения в Windows API. [23]

Название Windows API относится, по сути, к одной и той же возможности в каждой версии Windows, но у этой возможности есть другое название, основанное на основных архитектурных аспектах версии Windows, в которой она содержится. Когда была только одна версия, она называлась просто Windows API. Затем, когда было сделано первое крупное обновление, Microsoft дала ему имя Win32, а первой версии — Win16. Термин Windows API относится к обеим версиям и ко всем впоследствии разработанным основным версиям. [1]

Другие реализации

[ редактировать ]
ReactOS — это бесплатная операционная система с открытым исходным кодом , целью которой является реализация Windows 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 , которые были предназначены для реализации подмножества API Win16 в DOS (см. Список платформо-независимых библиотек графического интерфейса ).

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

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

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

[ редактировать ]

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

Для языка C++ компании Zortech (позже Symantec , затем Digital Mars ), Watcom и Borland выпустили хорошо известные коммерческие компиляторы, которые часто использовались с Win16, Win32 и Win32. Некоторые из них поставляли расширители памяти , позволяющие программам Win32 запускаться на Win16 с помощью распространяемой Microsoft Win32s DLL. Компилятор 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 (GCC) с использованием автономного набора заголовочных файлов, чтобы упростить связывание с DLL, специфичными для Win32. LCC-Win32 — это компилятор C, поддерживаемый Jacob Navia, бесплатная программа для некоммерческого использования. Pelles C — это бесплатный компилятор C, поддерживаемый Pelle Orinius. 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.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ И Паскаль , и ассемблер x86 широко использовались в более ранних версиях, прежде чем C стал доминирующим. Напоминанием об этом является то, что функции API по-прежнему используют соглашение о вызовах Pascal для восстановления стека из переданных параметров после вызова (хотя они ожидают, что параметры будут перемещены справа налево, как это делает большинство компиляторов C по умолчанию).
  2. ^ Номенклатура выпущенных 64-разрядных версий включает Windows XP Professional x64 Edition и x64 Editions Windows Server 2003, Windows Vista и Windows Server 2008 на платформе x86-64 (AMD64), а также Windows 2000 Server Limited Edition, 64-разрядную версию Windows XP. Edition , Windows Advanced Server 2003 для Itanium и Windows 2008 Advanced Server для Itanium на платформе IA-64 .
  1. ^ Jump up to: а б Сеть разработчиков Microsoft (июль 2005 г.). Обзор API Windows. Проверено 28 августа 2005 г.
  2. ^ Сеть разработчиков Microsoft (июль 2005 г.). Базовые услуги. Проверено 28 августа 2005 г.
  3. ^ Сеть разработчиков Microsoft (июль 2005 г.). Интерфейс графического устройства. Проверено 28 августа 2005 г.
  4. ^ «Г» . Сеть разработчиков Microsoft . Проверено 28 января 2009 г.
  5. ^ Сеть разработчиков Microsoft (июль 2005 г.). Пользовательский интерфейс. Проверено 28 августа 2005 г.
  6. ^ Сеть разработчиков Microsoft (2005). Библиотека общих диалоговых окон. Проверено 22 сентября 2005 г.
  7. ^ Сеть разработчиков Microsoft (июль 2005 г.). Общая библиотека управления. Проверено 28 августа 2005 г.
  8. ^ Сеть разработчиков Microsoft (июль 2005 г.). Оболочка Windows. Проверено 28 августа 2005 г.
  9. ^ Сеть разработчиков Microsoft (2005). Руководство программиста Shell. Проверено 28 августа 2005 г.
  10. ^ Сеть разработчиков Microsoft (июль 2005 г.). Сетевые службы. Проверено 28 августа 2005 г.
  11. ^ Сеть разработчиков Microsoft (январь 2006 г.); Программирование и повторное использование браузера . Проверено 22 января 2006 г.
  12. ^ «Пошаговое руководство: создание традиционного приложения для рабочего стола Windows (C++)» . Документы Майкрософт . 23 февраля 2022 г.
  13. ^ Jump up to: а б Мэйберри, Майкл (2012). Обнародован WinRT . Нью-Йорк: Апресс. п. 3. ISBN  978-1-4302-4585-8 .
  14. ^ Тексейра, Стив и Ксавье Пачеко (2002). Руководство разработчика Borland Delphi 6 . Сэмс. п. 253. ИСБН  0672321157 .
  15. ^ Руссинович, Марк (ноябрь 2006 г.). «Внутри собственных приложений» . Документы Майкрософт . Проверено 12 апреля 2022 г.
  16. ^ Чарльз Петцольд (декабрь 2001 г.). Программирование Microsoft Windows на C# . Майкрософт Пресс. За консолью, стр. 47.
  17. ^ Петцольд, Чарльз. «Печально известная программа Windows «Hello World»» . www.charlespetzold.com . Проверено 30 июня 2024 г.
  18. ^ Подробный анализ изменений в Windows API от XP до 10. Проверено 8 сентября 2016 г.
  19. Чарльз Петцольд (11 ноября 1998 г.). Программирование для Windows, пятое издание . Майкрософт Пресс. API и модели памяти, стр. 9.
  20. ^ Смит, Грэм (8 октября 2022 г.). «В Windows 95 был специальный код, предназначенный только для исправления ошибки в оригинальном SimCity» . Камень, Бумага, Дробовик .
  21. Раймонд Чен (15 октября 2003 г.). А как насчет BOZOSLIVEHERE и TABHETEXTOUTFORWIMPS? Проверено 29 июня 2022 г.
  22. ^ Хоффман, Крис. «В чем разница между папками «System32» и «SysWOW64» в Windows?» . Как компьютерщик . Проверено 11 апреля 2023 г.
  23. ^ Проект Исеран (1996–2001). История Windows API. Проверено 7 октября 2005 г.
  24. ^ «Домашняя страница Windows XP Professional x64 Edition» . Майкрософт.
  25. ^ «Обзор 64-битных вычислений Microsoft» . Майкрософт.
  26. ^ «MSDN: подготовка к 64-битной версии Windows» . Майкрософт.
  27. ^ WISE. Архивировано 30 марта 2008 г. в Wayback Machine.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 824a9e31ae0ddd7d17ef900f7899a6c5__1721763060
URL1:https://arc.ask3.ru/arc/aa/82/c5/824a9e31ae0ddd7d17ef900f7899a6c5.html
Заголовок, (Title) документа по адресу, URL1:
Windows API - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)