Windows APIVertaalhulp gevraagd. Dit artikel bevat mogelijk (taal)fouten.
U kunt dit artikel verbeteren. Op de overlegpagina of de vertaalpagina is mogelijk meer informatie te vinden. De Windows API is een set API's (application programming interface) die het besturingssysteem Windows aanbiedt aan programma's. Vroeger noemde men deze de Win32 API. De naam Windows API is echter een betere beschrijving aangezien ondertussen ook 64 bit-Windowsversies ondersteund worden. Bijna alle Windowsprogramma's integreren met de Windows API. Een softwareontwikkelaar kan gebruikmaken van de Microsoft Windows-SDK (Software Development Kit), die documentatie en tools voorziet om de Windows API en andere Windowstechnologieën te gebruiken. OverzichtDe werking van de Windows API kan verdeeld worden in 8 categorieën:
WebDe webbrowser Internet Explorer kan ook beschouwd worden als onderdeel van de Windows API, aangezien deze verschillende API's biedt die vaak gebruikt worden door andere toepassingen. Internet Explorer zit mee in het besturingssysteem sinds de tweede editie van Windows 98 en biedt webgerelateerde services aan toepassingen sinds Windows 98. Specifieker wordt het gebruikt:
MultimediaMicrosoft voorziet sinds Windows 95 OSR2 elke Windows-installatie van de DirectX-API's. DirectX voorziet een los gerelateerde set van multimedia en gamingservices, zoals:
Programma-interactieDe Windows API houdt zich vooral bezig met de interactie tussen het besturingssysteem en een toepassing. Voor de communicatie tussen de verschillende Windowstoepassingen onderling heeft Microsoft een reeks technologieën ontwikkeld naast de hoofdzakelijke Windows API. Dit begon met Dynamic Data Exchange (DDE), dat vervangen werd door Object Linking and Embedding (OLE) en later door het Component Object Model (COM), Automation Objects, ActiveX Controls en het .NET-framework. Er is niet altijd een duidelijk onderscheid tussen deze technologieën en ze overlappen vaak. De variëteit van termen is voornamelijk het resultaat van groeperen van softwaremechanismen die te maken hebben met een specifiek aspect van softwareontwikkeling. Automatisering in het bijzonder heeft te maken met het exporteren van de werking van een toepassing of component (als API) zodat deze door een andere toepassing of een menselijke gebruiker kan gebruikt worden. WrapperbibliothekenMicrosoft heeft verschillende wrappers ontwikkeld die sommige lagelevelfuncties van de Windows API overnamen en zo toepassingen toeliet op een abstractere manier te communiceren met de API. De Microsoft Foundation Class-bibliotheek (MFC) kapselt de Windows API-werking in in C++-klassen, en laat zo een meer objectgeoriënteerde manier van communiceren met de API toe. De Active Template-bibliotheek (ATL) is een templategeoriënteerde wrapper voor COM. De Windows Template-library (WTL) was ontwikkeld als een extensie voor ATL, en was bedoeld als een lichter alternatief voor MFC. Ook opmerkelijk zijn sommige aanbiedingen van Borland. De Object Windows-library (OWL) werd uitgebracht als een concurrerend product van MFC en bood een gelijkaardige objectgeoriënteerde wrapper. Borland moest later plaatsmaken voor de Visual Component-library (VCL), die geschreven is in Object Pascal en zowel in de Delphi als C++ Builder beschikbaar is. De meeste applicatieframeworks voor Windows kapselen (ten minste gedeeltelijk) de Windows API in. Vandaar dat zowel het .NET-framework, Java als alle andere programmeertalen in Windows een wrapperbibliotheek hebben of zijn. Windows API Code Pack for Microsoft .NET Framework is een .NET-wrapperbibliotheek voor de Windows API. In de 64 bit-Windowsversies is dezelfde benaming gebruikt voor de DLL-bestanden. GeschiedenisDe Windows API heeft altijd een groot deel van de onderliggende structuur van de Windowssystemen blootgelegd aan de programmeur. Dit geeft de programmeurs een grote flexibiliteit en macht over hun toepassingen. Het geeft de Windowstoepassingen echter ook een grote verantwoordelijkheid om verschillende low-levelhandelingen te verwerken die verband houden met een GUI. Charles Petzold, auteur van de veel gelezen Windows API-boeken, heeft het volgende gezegd: "Het originele "hello world"-programma in de Windows 1.0-SDK was een klein schandaal. HELLO.C was ongeveer 150 lijnen lang en het HELLO.RC-bronscript telde een 20-tal lijnen. (...) Oudere C-programmeurs voelden vaak afschuw of hilariteit wanneer ze het Windows-hello-worldprogramma tegenkwamen." Over de jaren heen zijn er verschillende veranderingen en toevoegingen gedaan aan het Windows-besturingssysteem, en de Windows API veranderde en weerspiegelde dit. De Windows API voor Windows 1.0 ondersteunde minder dan 450 functieoproepen, terwijl moderne versies van de Windows API er duizenden ondersteunen. Over het algemeen bleef de interface echter vrij consistent; een oude Windows 1.0-toepassing zal nog steeds herkenbaar zijn voor een programmeur die gewoon is aan de moderne Windows API. Microsoft doet inspanningen om software achterwaarts compatibel te maken en houden. Om dit te bereiken gaat Microsoft soms zo ver dat ze software ondersteunen die de API in een ongedocumenteerde of zelfs (voor de programmeur) illegale manier gebruikt. Raymond Chen, een ontwikkelaar bij Microsoft die aan de Windows API werkt, heeft het volgende gezegd: "Ik zou waarschijnlijk maanden kunnen schrijven over enkel en alleen toepassingen die foute dingen doen en wat we hebben moeten doen om hen weer werkende te krijgen (vaak ondanks zichzelf). Dit is waarom ik zeer kwaad word wanneer mensen Microsoft ervan beschuldigen met kwaad opzet toepassingen te beschadigen tijdens besturingssysteem-upgrades. Als er ook maar één toepassing niet meer werkte op Windows 95, nam ik dit op als een persoonlijk falen." Een van de grootste veranderingen die de Windows API onderging, was de overgang van Win16 (te vinden in Windows 3.1 en ouder) naar Win32 (Windows NT, Windows 95 en hoger). Terwijl Win32 oorspronkelijk geïntroduceerd werd met Windows NT 3.1 en Win32s het gebruik van de Win32-subset al toeliet voor Windows 95, was het pas vanaf Windows 95 dat vele applicaties werden overgezet naar Win32. Om de overgang te vergemakkelijken, werd er in Windows 95, zowel voor de externe ontwikkelaars als voor Microsoft, een complex schema van zogenaamde 'API thunks' gebruikt, die het mogelijk maakten voor 32 bit-code om 16 bit-code aan te roepen en (in enkele gevallen) vice versa. Zogenaamde 'flat thunks' lieten 32 bit-code toe om 16 bit-library's aan te roepen, en het schema werd intensief gebruikt binnen Windows 95 om te vermijden dat het hele besturingssysteem in een keer naar Win32 zou moeten overgezet worden. In Windows NT was het besturingssysteem enkel 32 bit (behalve de delen voor compatibiliteit met 16 bit-toepassingen), en enkel 'generic thunks' waren beschikbaar voor de thunk van Win16 naar Win32, alsook voor Windows 95. De Platform SDK bevatte een compiler die de nodige code kon produceren voor deze thunks. VersiesBijna elke nieuwe versie van Windows introduceerde zijn eigen toevoegingen en veranderingen aan de Windows API. De naam van de API echter, werd consistent gehouden tussen verschillende Windowsversies, en naamsveranderingen werden beperkt tot grote structurele en platformveranderingen voor Windows. Microsoft veranderde uiteindelijk de naam van de toenmalige 'Win32 API' familie naar 'Windows API', en veranderde de naam zo in een alomvattende term voor zowel verleden als toekomstige versies van de API.
Andere implementatiesHoewel Microsofts implementatie van de Windows API gepatenteerd is, wordt het algemeen aanvaard in de Verenigde Staten dat andere verkopers Windows emuleren door een identieke API te voorzien zonder het patent te schaden. Het project wine is een poging om een Win32-API-compatibiliteitslaag voor Unix-platformen te voorzien. ReactOS gaat een stap verder door een implementatie van het hele Windows-besturingssysteem te voorzien, en werkt nauw samen met het wine-project om compatibiliteit van code en codehergebruik te promoten. DosWin32 en HX DOS-Extender zijn andere projecten om de Windows API te emuleren, om eenvoudige Windowsprogramma's te draaien vanuit de DOS-command-line. Odin is een project dat probeert Win32 te emuleren bovenop OS/2. CompilerondersteuningOm software te ontwikkelen die de Windows API gebruikt, moet een compiler in staat zijn de Microsoftspecifieke DLL-bestanden en COM-objecten te verwerken en importeren. Ofwel moet de compiler overweg kunnen met de header-bestanden die het interieur van de API-functienamen onthullen, of moet deze dergelijke bestanden zelf kunnen voorzien. Voor bepaalde klassen van toepassingen moet het compilersysteem ook de IDL (interface definition language)-bestanden kunnen behandelen. Samen zijn deze vereisten (compilers, tools, bibliotheken en headers) gekend als het Microsoft Platform SDK. Lange tijd waren de Microsoft Visual Studio-familie van compilers en tools en de Borland-compilers de enige tools die dit konden voorzien (toch in het geval van Windows, de SDK zelf is te downloaden apart van de gehele IDE-suite, van de Microsoft Platform SDK Update). Tegenwoordig voorzien het MinGW- en het Cygwin-project ook een dergelijke omgeving, gebaseerd op de GNU Compiler Collection, die gebruikmaakt van een stand-alone headerbestandverzameling om het linken tussen Microsoft-DLL's mogelijk te maken. LCC-Win32 is een C-compiler onder de licentie "free for non-commercial use". Deze wordt in stand gehouden door Jacob Navia. Pelles C is een gratis C-compiler in stand gehouden door Pelle Orinius. Free Pascal is een GPL Object Pascal-compiler die in staat is software te schrijven, gebaseerd op de Windows API. MASM32 is een project ter ondersteuning van de Windows API die gebruikmaakt van de 32 bit-Microsoftassembler met zelfgemaakte of omgezette headers en bibliotheken van de Platform SDK. Windows-specifieke compilerondersteuning is ook vereist voor de toepassing Structured Exception Handling (SEH). Dit systeem dient twee doelen: het voorziet een substraat waarop een taalspecifieke exceptionhandling kan worden geïmplementeerd, en dit is de manier waarop de kerneltoepassingen waarschuwt bij optreden van uitzonderlijke toestanden, zoals dereferencing van een ongeldige pointer of stack-overflow. De Microsoft-/Borland-C++-compilers hadden de mogelijkheid dit systeem te gebruiken vanaf het ogenblik dat dit werd geïntroduceerd in Windows 95 en NT. De implementatie was echter niet gedocumenteerd en moest dus voor het wine-project en gratis compilers via reverse engineering achterhaald worden. SEH is gebaseerd op het duwen van exception-handlerframes op een stack, en deze dan toe te voegen aan een gelinkte lijst die opgeslagen is in de thread-local-storage (het eerste veld van de thread-environmentblok). Wanneer er zich een uitzondering voordoet, dan gaan de kernel en de basisbibliotheken de stack af op zoek naar handlers en filters en voeren deze uit waar ze zich voordoen. Uiteindelijk zal elke uitzondering die niet behandeld wordt door de toepassing zelf, opgevangen worden door de standaard backstop die de common-crashdialoog van de toepassing weergeeft. Zie ookExterne links
|