Windows API - Windows API

Windows API , neformálně WinAPI , je základní soubor Microsoft je rozhraní pro programování aplikací (API) jsou k dispozici v Microsoft Windows operační systémy. Název Windows API souhrnně odkazuje na několik různých implementací platforem, které jsou často označovány jejich vlastními názvy (například Win32 API ); viz část verze . Téměř všechny programy Windows interagují s Windows API. Na řadě operačních systémů Windows NT používá malý počet (například programy spuštěné na začátku procesu spouštění systému Windows ) nativní rozhraní API .

Podpora pro vývojáře je k dispozici ve formě software development kit , Microsoft Windows SDK , poskytuje dokumentaci a nástroje potřebné k sestavení software založený na Windows API a související rozhraní Windows.

Windows API (Win32) je zaměřen hlavně na programovací jazyk C v tom, že jeho odhalené funkce a datové struktury jsou v tomto jazyce popsány v posledních verzích jeho dokumentace. API však může použít jakýkoli kompilátor nebo assembler programovacího jazyka schopný zpracovat (dobře definované) datové struktury na nízké úrovni spolu s předepsanými konvencemi volání pro volání a zpětná volání . Podobně byla interní implementace funkce API vyvinuta v několika jazycích, historicky. Navzdory skutečnosti, že C není objektově orientovaný programovací jazyk, Windows API a Windows byly historicky popisovány jako objektově orientované. Existuje také mnoho tříd a rozšíření obálek (od společnosti Microsoft a dalších) pro objektově orientované jazyky, díky nimž je tato objektově orientovaná struktura výraznější ( Microsoft Foundation Class Library (MFC), Visual Component Library (VCL), GDI+ atd.) . Například Windows 8 poskytuje Windows API a WinRT API, které je implementováno v C ++ a je objektově orientované podle návrhu.

Přehled

Funkce poskytované rozhraním Windows API lze seskupit do osmi kategorií:

Základní služby
Poskytněte přístup k základním prostředkům, které má systém Windows k dispozici. Zahrnuty jsou věci jako souborové systémy , zařízení , procesy , vlákna a zpracování chyb . Tyto funkce jsou umístěny vkernel.exe, krnl286.exe nebo krnl386.exe soubory na 16bitových Windows a kernel32.dll a KernelBase.dllna 32 a 64 bitových Windows. Tyto soubory jsou umístěny ve složce\ Windows \ System32 na všech verzích Windows.
Pokročilé služby
Zajistěte přístup k funkcím mimo jádro. Zahrnuty jsou věci jako registr Windows , vypnutí/restart systému (nebo přerušení), spuštění/zastavení/vytvoření služby Windows , správa uživatelských účtů. Tyto funkce jsou umístěny vadvapi32.dll a advapires32.dll na 32bitových Windows.
Rozhraní grafického zařízení
Poskytuje funkce pro výstup grafického obsahu na monitory , tiskárny a další výstupní zařízení . Sídlí vgdi.exe na 16bitových Windows a gdi32.dllna 32bitových Windows v uživatelském režimu. Poskytuje podporu GDI v režimu jádra, win32k.syskterá komunikuje přímo s grafickým ovladačem.
Uživatelské rozhraní
Poskytuje funkce pro vytváření a správu oken obrazovky a většinu základních ovládacích prvků, jako jsou tlačítka a posuvníky , příjem vstupu myši a klávesnice a další funkce související s částí grafického uživatelského rozhraní (GUI) systému Windows. Tato funkční jednotka sídlí vuser.exe na 16bitových Windows a user32.dllna 32bitových Windows. Od verzí systému Windows XP jsou základní ovládací prvky umístěny vcomctl32.dll, společně se společnými ovládacími prvky (Common Control Library).
Společná knihovna dialogových oken
Poskytuje aplikacím standardní dialogová okna pro otevírání a ukládání souborů, výběr barvy a písma atd. Knihovna se nachází v souboru s názvemcommdlg.dll na 16bitových Windows a comdlg32.dllna 32bitových Windows. Je seskupen do kategorie Uživatelské rozhraní API.
Společná řídicí knihovna
Poskytuje aplikacím přístup k některým pokročilým ovládacím prvkům poskytovaným operačním systémem. Patří sem věci jako stavové řádky , ukazatele průběhu , panely nástrojů a karty . Knihovna se nachází v souboru dynamické knihovny (DLL) s názvemcommctrl.dll na 16bitových Windows a comctl32.dllna 32bitových Windows. Je seskupen do kategorie Uživatelské rozhraní API.
Windows Shell
Součást rozhraní Windows API umožňuje aplikacím přistupovat k funkcím poskytovaným prostředím operačního systému a měnit je a vylepšovat. Komponenta se nachází vshell.dll na 16bitových Windows a shell32.dllna 32bitových Windows. Funkce Shell Lightweight Utility jsou k dispozicishlwapi.dll. Je seskupen do kategorie Uživatelské rozhraní API.
Síťové služby
Poskytněte přístup k různým síťovým schopnostem operačního systému. Mezi její dílčí součásti patří NetBIOS , Winsock , NetDDE , vzdálené volání procedur (RPC) a mnoho dalších. Tato komponenta sídlí vnetapi32.dll na 32bitových Windows.

Web

Internet Explorer (IE) webový prohlížeč také odhaluje řadu API, které jsou často používané aplikace, a jako takový by mohl být považován za součást Windows API. IE je součástí operačního systému od Windows 95 OSR2 a poskytuje webové služby aplikacím od Windows 98 . Konkrétně se používá k zajištění:

  • Integrovatelný ovládací prvek webového prohlížeče, obsažený v shdocvw.dll a mshtml.dll.
  • Služba přezdívky URL, zadržená v urlmon.dll, který poskytuje objekty COM aplikacím pro řešení adres URL. Aplikace mohou také poskytovat vlastní obslužné rutiny adres URL, které mohou používat ostatní.
  • Klientská knihovna HTTP, která také zohledňuje nastavení celého serveru Proxy (wininet.dll); Microsoft však přidal další klientskou knihovnu HTTP s názvem winhttp.dll, která je menší a vhodnější pro některé aplikace.
  • Knihovna pro podporu vícejazyčné a mezinárodní textové podpory (mlang.dll).
  • DirectX Transforms, sada komponent obrazového filtru.
  • Podpora XML (komponenty MSXML, uložené v msxml*.dll).
  • Přístup k adresářům systému Windows.

Multimédia

Klasické Windows Multimedia API je umístěno v souboru winmm.dll a obsahuje funkce pro přehrávání zvukových souborů, odesílání a přijímání zpráv MIDI, přístup k joystickům a usnadnění všech ostatních funkcí takzvaného MCI subsystému Windows, který pochází z Multimediální rozšíření dostupná pro Windows 3.0 samostatně a jako nedílná součást operačního systému od Windows 3.1, kdy byly umístěny v mmsystem.dll.

Kromě toho společnost Microsoft jako součást každé verze systému Windows od Windows 95 OSR2 poskytla rozhraní DirectX API - volně související sadu grafických a herních služeb, která zahrnuje:

  • Direct2D pro hardwarově akcelerovanou 2D vektorovou grafiku.
  • Direct3D pro hardwarově akcelerovanou 3D grafiku.
  • DirectSound pro hardwarově akcelerovaný přístup ke zvukové kartě nízké úrovně.
  • DirectInput pro komunikaci se vstupními zařízeními, jako jsou joysticky a gamepady.
  • DirectPlay jako herní infrastruktura pro více hráčů. Tato komponenta byla od DirectX 9 zastaralá a společnost Microsoft již nedoporučuje její použití pro vývoj her.
  • DirectDraw pro 2D grafiku v dřívějších verzích DirectX, nyní zastaralé a nahrazené Direct2D.
  • WinG pro 2D grafiku v 16bitových hrách napsaných pro verze Windows 3.x. Zastaralé s vydáním Windows 95.

Společnost Microsoft také poskytuje několik rozhraní API pro kódování a přehrávání médií:

  • DirectShow , která vytváří a provozuje obecné multimediální kanály. Je srovnatelný s rámcem GStreamer a často se používá k vykreslování herních videí a vytváření přehrávačů médií ( Windows Media Player je na něm založen). DirectShow již není doporučován pro vývoj her.
  • Media Foundation , novější rozhraní API pro digitální média, které má nahradit DirectShow.

Interakce programu

Windows API je navrženo převážně pro interakci mezi operačním systémem a aplikací. Pro komunikaci mezi různými aplikacemi Windows vyvinul Microsoft řadu technologií vedle hlavního Windows API. Začalo to s Dynamic Data Exchange (DDE), která byla nahrazena propojováním a vkládáním objektů (OLE) a později komponentním objektovým modelem (COM), automatizačními objekty , ovládacími prvky ActiveX a .NET Framework . Mezi těmito technologiemi není vždy jasný rozdíl a mnoho se překrývá.

Rozmanitost termínů je v zásadě výsledkem seskupování softwarových mechanismů, které se vztahují k danému aspektu vývoje softwaru. Automatizace se konkrétně týká exportu funkce aplikace nebo komponenty (jako rozhraní API (Application Programming Interface )), aby ji bylo možné ovládat jinými aplikacemi namísto pouze lidskými uživateli. NET je samostatná obecná metodika a technologie pro vyvíjet desktopové a webové aplikace napsané v různých kompilovaných jazycích just-in-time (JIT) .

Windows.pas je jednotka Pascal / Delphi, která obsahuje deklarace API specifické pro Windows . Je to Pascal ekvivalent Windows.h , používaný v C.

Obálky knihoven

Společnost Microsoft vyvinula různé obaly, které převzaly některé z funkcí nižší úrovně rozhraní Windows API a umožnily aplikacím komunikovat s rozhraním API abstraktnějším způsobem. Knihovna Microsoft Foundation Class Library (MFC) zabalila funkce Windows API do tříd C ++ , a umožňuje tak objektověji orientovaný způsob interakce s API. Active Template Library (ATL) je šablona orientovaný wrapper pro COM. Windows Template Library (WTL) byl vyvinut jako rozšíření k ATL, a které jsou určeny jako menší alternativa k MFC.

Většina aplikačních rámců pro Windows (alespoň částečně) obaluje Windows API. To znamená, že rozhraní .NET Framework a Java , též podobně jakékoliv jiné programovací jazyky pod Windows, jsou (nebo obsahují) wrapper knihovny.

Dějiny

Rozhraní Windows API vždy odhalilo programátorům velkou část základní struktury systémů Windows. To mělo tu výhodu, že jim to dávalo velkou flexibilitu a moc nad jejich aplikacemi, ale také to přineslo velkou odpovědnost za to, jak aplikace zpracovávají různé operace na nízké úrovni, někdy únavné, které jsou spojeny s grafickým uživatelským rozhraním .

Začínající programátor C například často jako první úkol napíše jednoduchý „ahoj svět“. Pracovní částí programu je pouze jeden řádek printf v rámci hlavního podprogramu. Režie pro propojení se standardní I/O knihovnou je také pouze jeden řádek:

#include <stdio.h>

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

Verze pro Windows byla stále jen jednou pracovní řádkou kódu, ale vyžadovala mnoho, mnoho dalších řádků režie. Charles Petzold , který napsal několik knih o programování pro Windows API, řekl: „Původní program hello world v sadě Windows 1.0 SDK byl trochu skandál. HELLO.C byl dlouhý asi 150 řádků a skript zdroje HELLO.RC měl dalších asi 20 řádků. (...) Zkušení programátoři se při setkání s programem Windows ahoj svět často schoulili do hrůzy nebo smíchu. “

V průběhu let byly v systémech Windows prováděny různé změny a doplňky a Windows API se měnilo a rostlo, aby to odráželo. Windows API pro Windows 1.0 podporovalo méně než 450 volání funkcí , zatímco moderní verze Windows API podporují tisíce. Obecně však rozhraní zůstalo poměrně konzistentní a stará aplikace Windows 1.0 bude i nadále vypadat dobře jako programátor, který je zvyklý na moderní Windows API.

Microsoft vyvinul úsilí o zachování zpětné kompatibility . Aby toho bylo dosaženo, při vývoji nových verzí systému Windows někdy společnost Microsoft implementovala řešení umožňující kompatibilitu se softwarem jiných výrobců, který předchozí verzi používal nezdokumentovaným nebo dokonce neviditelným způsobem. Raymond Chen , vývojář společnosti Microsoft, který pracuje na rozhraní Windows API, řekl: „Pravděpodobně bych mohl měsíce psát pouze o špatných věcech, které aplikace dělají, a o tom, co jsme museli udělat, abychom je znovu spustili (často navzdory sobě). proto jsem obzvlášť rozzuřený, když lidé obviňují Microsoft ze zlomyslného rozbíjení aplikací během upgradů OS. Pokud se některá aplikace nepovedla spustit na Windows 95, bral jsem to jako osobní selhání. “

Jednou z největších změn Windows API byl přechod z Win16 (dodávaný ve Windows 3.1 a starším) na Win32 (Windows NT a Windows 95 a vyšší). Zatímco Win32 byl původně představen s Windows NT 3.1 a Win32s umožňoval použití podmnožiny Win32 před Windows 95, rozšířené portování aplikací do Win32 začalo až ve Windows 95. Aby se usnadnil přechod, v systému Windows 95 bylo pro vývojáře mimo i uvnitř Microsoftu použito komplexní schéma API thunks, které umožnilo volání 32bitového kódu do 16bitového kódu (pro většinu API Win16) a naopak. Ploché thunky umožňovaly volání 32bitového kódu do 16bitových knihoven a schéma bylo hojně používáno v knihovnách Windows 95, aby se zabránilo portování celého OS do Win32 v jedné dávce. V systému Windows NT byl operační systém čistě 32bitový, s výjimkou částí pro kompatibilitu se 16bitovými aplikacemi, a od Thunmu Win16 po Win32 byly k dispozici pouze generické thunky, jako pro Windows 95. Platform SDK dodávaný s kompilátorem, který by mohl produkovat kód potřebný pro tyto thunky. Verze 64bitových Windows mohou také spouštět 32bitové aplikace přes WoW64 . Složka SysWOW64 umístěná ve složce Windows na jednotce OS obsahuje několik nástrojů pro podporu 32bitových aplikací.

Verze

Téměř každá nová verze systému Microsoft Windows představila své vlastní doplňky a změny rozhraní Windows API. Název rozhraní API však zůstal mezi různými verzemi systému Windows konzistentní a změny názvu byly omezeny na hlavní architektonické a platformové změny pro Windows. Microsoft nakonec změnil název tehdy aktuální rodiny Win32 API na Windows API a vytvořil z něj souhrnný termín pro předchozí i budoucí verze API.

  • Win16 je API pro první, 16bitové verze systému Microsoft Windows . Ty byly původně označovány jednoduše jako Windows API , ale později byly přejmenovány na Win16 ve snaze odlišit je od novější, 32bitové verze Windows API. Funkce rozhraní Win16 API se nacházejí hlavně v základních souborech operačního systému: kernel.exe (nebo krnl286.exe nebo krnl386.exe ), user.exe a gdi.exe . Navzdory příponu souboru zexe, ve skutečnosti se jedná o dynamické knihovny .
  • Win32 je 32bitové rozhraní pro programování aplikací (API) pro verze systému Windows od 95 výše. API se skládá z funkcí implementovaných, stejně jako u Win16, v systémových knihovnách DLL. Jádrem DLL Win32 jsou kernel32.dll , user32.dll a gdi32.dll . Win32 byl představen s Windows NT . Verze Win32 dodávaná se systémem Windows 95 byla původně označována jako Win32c, přičemž c znamenalo kompatibilitu . Microsoft tento termín později opustil ve prospěch Win32.
  • Win32s je rozšíření prorodinu Windows 3.1x systému Microsoft Windows, kterépro tyto systémyimplementovalo podmnožinu rozhraní Win32 API. Písmeno „s“ znamená „podmnožina“.
  • Win64 je variantou API realizován na 64bitových platformách v architektuře systému Windows (od roku 2021 x86-64 a AArch64 ). 32bitové i 64bitové verze aplikace lze stále kompilovat z jedné kódové základny , ačkoli některá starší rozhraní API byla zastaralá a některá rozhraní API, která již byla ve Win32 zastaralá, byla odebrána. Všechny ukazatele paměti jsou ve výchozím nastavení 64bitové ( model LLP64 ), takže je třeba zkontrolovat kompatibilitu zdrojového kódu s aritmetikou 64bitového ukazatele a podle potřeby přepsat.
  • WinCE je implementace Windows API pro operační systém Windows CE .

Další implementace

Projekt Wine poskytuje vrstvu kompatibility Win32 API pro platformy podobné Unixu , mezi API jádra Linuxu a programy napsanými pro Windows API. ReactOS jde ještě o krok dále a usiluje o implementaci plného operačního systému Windows, přičemž úzce spolupracuje s projektem Wine na podpoře opětovného použití kódu a kompatibility. DosWin32 a HX DOS Extender jsou další projekty, které emulují Windows API a umožňují spouštění jednoduchých programů Windows z příkazového řádku DOS . Odin je projekt emulace Win32 na OS/2 , který nahrazuje původní emulaci Win-OS/2, která byla založena na kódu Microsoftu. Mezi další drobné implementace patří knihovny MEWEL a Zinc, které byly určeny k implementaci podmnožiny rozhraní Win16 API v systému DOS (viz seznam knihoven GUI nezávislých na platformě ).

Windows Interface Source Environment (WISE) byl licenční program od společnosti Microsoft, který vývojářům umožnil překompilovat a spouštět aplikace založené na systému Windows na platformách Unix a Macintosh . WISE SDK byly založeny na emulátoru Windows API, který mohl na těchto platformách běžet.

Úsilí o standardizaci zahrnovalo veřejné rozhraní Windows (PWI) Sun pro Win16 (viz také: Sun Windows Application Binary Interface ( Wabi )), Willows Software Application Programming Interface pro Windows (APIW) pro Win16 a Win32 (viz také: Willows TWIN ) a ECMA-234 , který se pokusil závazně standardizovat Windows API.

Podpora kompilátoru

K vývoji softwaru, který používá Windows API, musí být kompilátor schopen používat výše uvedené knihovny DLL specifické pro Microsoft (objekty COM jsou mimo Win32 a předpokládají určité rozložení vtable). Kompilátor musí buď zpracovat hlavičkové soubory, které odhalí názvy funkcí vnitřního rozhraní API, nebo takové soubory dodat.

Pro jazyk C ++, Zortech (později Symantec , pak Digital Mars ), Watcom a Borland vytvořily známé komerční kompilátory, které byly často používány s Win16, Win32s a Win32. Některé z nich dodaly prodlužovače paměti , které umožňují spouštění programů Win32 na Win16 s redistribuovatelnou knihovnou Win32s od společnosti Microsoft. Kompilátor Zortech byl pravděpodobně jedním z prvních stabilních a použitelných kompilátorů C ++ pro programování Windows, než měl Microsoft kompilátor C ++.

U určitých tříd aplikací by měl kompilátorový systém zvládnout také soubory IDL ( Interface Description Language ). Souhrnně jsou tyto předpoklady (kompilátory, nástroje, knihovny a záhlaví) známé jako Microsoft Platform SDK . Nějaký čas byly integrované vývojové systémy Microsoft Visual Studio a Borland jediným integrovaným vývojovým prostředím (IDE), které to mohlo zajistit (i když SDK je možné stáhnout zdarma samostatně z celé sady IDE, z Microsoft Windows SDK pro Windows 7 a .NET Framework 4 ).

Od roku 2016 projekty MinGW a Cygwin také poskytují takové prostředí založené na GNU Compiler Collection (GCC), využívající samostatnou sadu hlavičkových souborů, aby bylo propojení s knihovnami DLL specifickými pro Win32 jednoduché. LCC-Win32 je kompilátor C spravovaný Jacobem Naviem, freeware pro nekomerční použití. Pelles C je freeware kompilátor C spravovaný Pelle Oriniusem. Free Pascal je bezplatný softwarový kompilátor Object Pascal, který podporuje Windows API. Balíček MASM32 je vyspělý projekt poskytující podporu pro Windows API v rámci Microsoft Macro Assembler (MASM) pomocí vlastních nebo převedených záhlaví a knihoven z Platform SDK. Flat assembler FASM umožňuje vytvářet programy Windows bez použití externího linkeru, i když běží na Linuxu.

Pro strukturované zpracování výjimek (SEH) je nutná také podpora kompilátoru specifická pro Windows . Tento systém slouží dvěma účelům: poskytuje substrát, na kterém lze implementovat zpracování výjimek specifických pro jazyk , a je to, jak jádro upozorňuje aplikace na výjimečné podmínky, jako je dereferencování neplatného ukazatele nebo přetečení zásobníku. Kompilátory C/Microsoft/Borland C ++ měly možnost používat tento systém, jakmile byl představen v systému Windows 95 a NT, ale skutečná implementace byla nezdokumentovaná a pro projekt Wine a bezplatné kompilátory musela být provedena zpětná analýza. SEH je založeno na odesílání rámců obsluhy výjimek do zásobníku a jejich přidání do propojeného seznamu uloženého v místním úložišti vláken (první pole bloku prostředí vlákna). Když je vyvolána výjimka, knihovny jádra a základny uvolní obslužné rutiny a filtry spuštěné v zásobníku, když se vyskytnou. Nakonec každou výjimku, s níž aplikace nebude zacházet, vyřeší výchozí obslužný program zpětného zastavení, který zobrazí běžné dialogové okno selhání systému Windows.

Viz také

Poznámky

externí odkazy