Fout bij het werken met functies van externe dynamisch geladen bibliotheken

De structuur van de bibliotheekbronnen van het Windows-besturingssysteem kan als volgt worden weergegeven:

  • Ten eerste, op het laagste niveau, zijn er "onderbrekingen" van het systeem zelf, waarvan de "benen" groeien vanaf de allereerste versies van Windows, bovendien is alles van die oude MS-DOS-oude vrouw (ja, op dit niveau in 30 jaar tijd) niets in Windows is veranderd). Toegang tot deze bibliotheek is het gemakkelijkst via de assembler met het INT (interrupt) commando, vandaar de "interrupts", hoewel dit niveau in feite weinig te maken heeft met de interrupt handling routines.
  • We gaan een stapje hoger en stappen in WinSDK, een software-ontwikkelkit van Windows. Dit is een soort analogon van dezelfde "onderbrekingen", maar nu al rekening houdend met de specifieke kenmerken van de organisatie van Windows - de ontwikkelaar krijgt toegang tot deze bibliotheek via zijn gebruikelijke code van de gebruikte taal op het hoogste niveau.

De enige moeilijkheid is dat de terminologie van de WinSDK-beschrijving verschilt van de terminologie van de beschrijving van de toegepaste programmeertaal zelf, de functies (neem dezelfde Builder of Delphi). Gelukkig zijn alle WinSDK-functies gedetailleerd beschreven in de ontwikkelomgeving zelf (in feite hebben ze er niets mee te maken, hun populariteit is zo groot).

WinSDK-functies worden "geassembleerd" in bestanden van dynamisch verbonden (letterlijk - laadbare) bibliotheken - dynamic load library (dll). De gebruiker van een dergelijke bibliotheek hoeft het adres van de functie niet te kennen - het is voldoende voor hem om de naam van de functie te weten en om er zeker van te zijn dat de functie in de bibliotheek staat. Toegangspunten tot functies worden gedefinieerd in de beschrijving van de bibliotheek zelf.

  • We gaan ook hoger en we zitten in de add-on-programmabibliotheken op Windows. Een van de bekendste add-ons is het DirectX grafische pakket. Hier is dezelfde organisatie - allemaal dezelfde dll-bestanden.

De fout d3d11.dll is verbonden met een van de DirectX-bibliotheken - het slaat de functies op van het weergeven van driedimensionale grafische modellen.

Kleine verduidelijkingen

Hier moet je begrijpen dat wanneer een eenvoudig bericht "Fout d3d11.dll" op het scherm verschijnt, dit niet precies het juiste bericht is, maar het geeft niet precies de essentie van het probleem weer. Soms is er een foutmelding "could not create d3d11 device" - hoe te repareren, de tekst zelf kan weinig doen met zo'n fout.

Nauwkeuriger gezegd, zou dit bericht eruit moeten zien als: "Fout bij het invoeren van de xyz-functie, in de d3d11.dll-bibliotheek" of eenvoudiger - "De xyz-functie in de bibliotheek d3d11.dll is niet gedefinieerd".

Een ander ding is dat applicatieontwikkelaars vaak niet de moeite nemen met verfijningen en precies een eenvoudige, "onbepaalde" versie van de aard van de fout die zich heeft voorgedaan. Maar in wezen verandert het niet. De belangrijkste faaloorzaken - of de bibliotheek d3d11.dll ontbreekt als optie - d3d11.dll werd niet gevonden, of bevat niet de noodzakelijke functie, of is beschadigd, zodat de functie niet toegankelijk is.

Bugfix

De oplossing voor de functietoegangsfout in d3d11.dll is om de bibliotheek zelf opnieuw in te delen. DLL - uitvoerbare code, voer zo'n bestand in en bewerken zal niet werken. Bovendien verwijst het bestand naar de 11e versie van het DirectX-pakket.

De eerste manier om de fout te verhelpen is dus om het DirectX 11-pakket te herschikken. Deze methode is lang geleden eenvoudig en getest, het belangrijkste is om de werkversie van de invoegtoepassing zelf te vinden, het beste kunt u doen op de officiële Microsoft-website.

DirectX installeren op Windows

Een andere manier is om het bestand d3d11.dll zelf opnieuw in te delen. Dit kan gedaan worden met behulp van een gespecialiseerde utility dll-files.com, die gratis en beschikbaar is op dezelfde site.

Dus installeer en voer dll-bestanden uit.

Zoek naar een DLL-bestand in het DLL-files.com-programma

Voer in de zoekbalk "d3d11.dll" in. Nadat de bibliotheek is gevonden, klikt u op "Installeren".

Een DLL-bestand installeren in het programma DLL-files.com

Als je gewend bent om alles zelf te doen, dan kan het probleem handmatig worden opgelost - dit is de derde manier. Download het bestand d3d11.dll om het te gebruiken en plaats het in de gewenste systeemmap. Hier moet je voorzichtig zijn, omdat deze map anders is in verschillende versies van Windows (in de voorbeelden wordt verondersteld dat het systeem is geïnstalleerd op het station "C:", als dit niet het geval is, moet de schijf geschikt zijn):

  • in versies van Windows XP, Vista, 7, 8, 8.1 en 10 - C: \ Windows \ System32;
  • in Windows 95, 98 en Me - C: \ Windows \ System;
  • op Windows NT en 2000 - C: \ WINNT \ System32.

Houd er rekening mee - als er ook een versie van het systeem is voor een 64-bits processor, dan is de uiteindelijke map voor ons bestand toch "SysWOW64".

Het overschrijven van een bestand naar een map biedt nog geen werk. Nu moet u het registreren in het Windows-register. Om dit te doen, voeren we de volgende opdracht uit via het opdrachtvenster (Start / Hoofdmenu / Uitvoeren): regsvr32 d3d11.dll.

conclusie

De oplossing voor de overgrote meerderheid van problemen die zijn verbonden met externe dynamisch geladen bibliotheken van het Windows-besturingssysteem gaat vaak gepaard met het herschikken van de bibliotheek zelf, hetzij onafhankelijk of via een gemeenschappelijk pakket (in ons voorbeeld DirectX 11).

Het is mogelijk om een ​​dll-bestand in het systeem te installeren en handmatig, door het simpelweg naar de gewenste map te kopiëren. Maar eerst moet u deze map kennen. En ten tweede moet een dergelijk bestand worden geregistreerd in het Windows-systeemregister. Het kan niet zonder de kantoorhulpprogramma's die met het register van het systeem zelf werken.

Als u een soortgelijke fout tegenkomt, schrijf dan over uw ervaringen in de opmerkingen.