Введение

Интерфейсы программирования приложений Microsoft в Windows

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

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

API Windows определен на языке программирования C. Его функции и структуры данных определены в синтаксисе C (см. windows.h). Однако API может использоваться посредством любого языка программирования, способного взаимодействовать со структурами данных API и соглашениями о вызовах функций и обратных вызовах. Важно отметить, что внутренняя реализация функций API была разработана на нескольких языках, отличных от C.

Несмотря на то, что C не является языком объектно-ориентированного программирования (ООП), API Windows в некоторой степени объектно-ориентирован благодаря использованию дескрипторов. Различные другие технологии от Microsoft и других компаний делают этот объектно-ориентированный аспект более явным, используя язык ООП, такой как C++, например, Microsoft Foundation Class Library (MFC), Visual Component Library (VCL), GDI+. Важно отметить, что Windows 8 предоставляет API Windows и WinRT API, который реализован на C++ и изначально разработан как объектно-ориентированный. API Windows в основном предназначен для того, чтобы программа могла получить доступ к функциям операционной системы. Для обмена данными между различными приложениями Windows, Microsoft разработала ряд технологий в дополнение к API Windows. Это началось с Dynamic Data Exchange (DDE), который был заменен Object Linking and Embedding (OLE), а затем Component Object Model (COM), объекты автоматизации, ActiveX-элементы управления и .NET Framework. Между этими технологиями не всегда существует четкое различие, и они часто пересекаются. Разнообразие терминов в основном является результатом объединения программных механизмов, связанных с определенным аспектом разработки программного обеспечения. Автоматизация конкретно относится к экспорту функциональности приложения или компонента (в виде интерфейса программирования приложений (API)) для управления им другими приложениями, а не только пользователями. .NET – это самодостаточная общая методология и технология для разработки настольных и веб-приложений, написанных на различных языках, компилируемых в режиме реального времени (JIT).

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

Каждая версия Microsoft Windows содержит версию Windows API, и почти каждая новая версия Microsoft Windows добавляет и изменяет функции Windows API. Название Windows API относится к схожей функциональности в каждой версии Windows, но существует и другое название, основанное на ключевых архитектурных особенностях версии Windows, в которой она реализована. Когда существовала только одна версия, она просто называлась Windows API. Затем, после первого крупного обновления, Microsoft присвоила ему имя Win32, а первой версии – Win16. Термин Windows API относится как к этим версиям, так и ко всем последующим основным версиям. 32-разрядные и 64-разрядные версии приложения могут быть скомпилированы из одной кодовой базы, хотя некоторые старые функции API устарели, а некоторые из функций API, которые были объявлены устаревшими в Win32, были удалены. Все указатели памяти по умолчанию 64-разрядные (модель LLP64), поэтому портирование Win32-совместимого исходного кода включает в себя обновление для 64-разрядной арифметики указателей. WinCE – это версия, используемая в операционной системе Windows CE.

Другие варианты реализации

Проект Wine предоставляет уровень совместимости Win32 API для Unix-подобных платформ, находящийся между API ядра Linux и программами, написанными для API Windows. ReactOS идёт ещё дальше и стремится реализовать полноценную операционную систему Windows, тесно сотрудничая с проектом Wine для повторного использования кода и обеспечения совместимости. DosWin32 и HX DOS Extender – другие проекты, эмулирующие Windows API для запуска простых программ Windows из командной строки DOS. Odin – проект, эмулирующий Win32 на OS/2, заменяющий оригинальную эмуляцию Win OS/2, основанную на коде Microsoft. Другие менее значительные реализации включают библиотеки MEWEL и Zinc, предназначенные для реализации подмножества Win16 API на DOS (см. Список графических библиотек, независимых от платформы). Windows Interface Source Environment (WISE) – лицензионная программа Microsoft, позволявшая разработчикам перекомпилировать и запускать приложения для Windows на платформах Unix и Macintosh. WISE SDK базировались на эмуляторе Windows API, способном работать на этих платформах. Попытки стандартизации включали Public Windows Interface (PWI) от Sun для Win16 (см. также: Sun Windows Application Binary Interface (Wabi)), Application Programming Interface for Windows (APIW) от Willows Software для Win16 и Win32 (см. также: Willows TWIN) и ECMA 234, который предпринял попытку обязательной стандартизации API Windows.

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

Для разработки программного обеспечения, использующего Windows API, компилятор должен уметь использовать специальные DLL-файлы Microsoft, перечисленные выше (объекты COM находятся вне Win32 и предполагают определенную структуру vtable). Компилятор должен либо обрабатывать файлы заголовков, раскрывающие имена внутренних функций API, либо предоставлять такие файлы. Для языка C++, Zortech (позже Symantec, затем Digital Mars), Watcom и Borland создали известные коммерческие компиляторы, которые часто использовались с Win16, Win32s и Win32. Некоторые из них поставляли расширители памяти, позволяя программам Win32 работать на Win16 с перераспространяемой DLL Win32s от Microsoft. Компилятор Zortech, вероятно, был одним из первых стабильных и удобных компиляторов C++ для программирования под Windows, до появления компилятора C++ от Microsoft. Для определенных классов приложений компиляторная система также должна уметь обрабатывать файлы языка описания интерфейсов (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, поддерживаемый Jacob Navia, распространяемый бесплатно для некоммерческого использования. Pelles C — это бесплатный компилятор C, поддерживаемый Pelle Orinius. Free Pascal — это компилятор Object Pascal с открытым исходным кодом, поддерживающий Windows API. Пакет MASM32 — это зрелый проект, обеспечивающий поддержку Windows API под Microsoft Macro Assembler (MASM) с использованием специально созданных или преобразованных заголовков и библиотек из Platform SDK. Flat assembler FASM позволяет создавать программы Windows без использования внешнего компоновщика, даже при работе в Linux. Также необходима поддержка компилятора, специфичного для Windows, для обработки структурированных исключений (SEH). Эта система служит двум целям: она предоставляет основу, на которой может быть реализована обработка исключений, специфичных для языка, и является способом, которым ядро уведомляет приложения об исключительных ситуациях, таких как разыменование недопустимого указателя или переполнение стека. Компиляторы Microsoft/Borland C++ могли использовать эту систему сразу после ее появления в Windows 95 и NT, однако фактическая реализация была недокументирована и должна была быть реконструирована для проекта Wine и бесплатных компиляторов. SEH основан на помещении кадров обработчиков исключений в стек, а затем добавлении их в связанный список, хранящийся в локальном хранилище потока (первое поле блока среды потока). При возникновении исключения ядро и базовые библиотеки раскручивают стек, выполняя обработчики и фильтры по мере их обнаружения. В конечном итоге каждое исключение, не обработанное приложением, будет обработано обработчиком по умолчанию, который выводит стандартное окно сообщения об ошибке Windows.