Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En moduldefinitions- eller DEF-fil (*.def) är en textfil som innehåller en eller flera modulinstruktioner som beskriver olika attribut för en DLL. Om du inte använder nyckelordet __declspec(dllexport) för att exportera DLL-funktionerna kräver DLL-filen en DEF-fil.
En minimal DEF-fil måste innehålla följande module-definition-instruktioner:
Den första instruktionen i filen måste vara LIBRARY-instruktionen. Den här instruktionen identifierar DEF-filen som tillhör en DLL. LIBRARY-instruktionen följs av namnet på DLL:en. Länkaren placerar det här namnet i DLL:ns importbibliotek.
EXPORT-instruktionen visar namnen och, om du vill, ordningsvärdena för de funktioner som exporteras av DLL:en. Du tilldelar funktionen ett ordningstal genom att följa funktionens namn med ett vidtecken (@) och ett tal. När du anger ordningstal måste de ligga i intervallet 1 till N, där N är antalet funktioner som exporteras av DLL:n. Om du vill exportera funktioner efter ordning läser du Exportera funktioner från en DLL efter ordningstal i stället för efter namn samt det här avsnittet.
En DLL som innehåller koden för att implementera ett binärt sökträd kan till exempel se ut så här:
LIBRARY BTREE
EXPORTS
Insert @1
Delete @2
Member @3
Min @4
Om du använder MFC DLL-guiden för att skapa en MFC DLL skapar guiden en skeleton DEF-fil åt dig och lägger automatiskt till den i projektet. Lägg till namnen på de funktioner som ska exporteras till den här filen. För DLL:er som inte är MFC skapar du DEF-filen själv och lägger till den i projektet. Gå sedan till Project>Properties>Linker>Input>Module Definition File och ange namnet på DEF-filen. Upprepa det här steget för varje konfiguration och plattform, eller gör allt på en gång genom att välja Konfiguration = Alla konfigurationer och Plattform = Alla plattformar.
Om du exporterar funktioner i en C++-fil måste du antingen placera de dekorerade namnen i DEF-filen eller definiera dina exporterade funktioner med C-standardlänkage med hjälp av extern "C". Om du behöver placera de dekorerade namnen i DEF-filen kan du hämta dem med hjälp av DUMPBIN-verktyget eller med hjälp av alternativet linker /MAP . Observera att de dekorerade namnen som skapas av kompilatorn är kompilatorspecifika. Om du placerar de dekorerade namnen som skapats av Microsoft C++-kompilatorn (MSVC) i en DEF-fil måste program som länkar till din DLL också skapas med samma version av MSVC så att de dekorerade namnen i det anropande programmet matchar de exporterade namnen i DLL:s DEF-fil.
Anmärkning
En DLL som skapats med Visual Studio 2015 kan användas av program som skapats med Visual Studio 2017 eller Visual Studio 2019.
Om du skapar ett tilläggs-DLL och exporterar med en DEF-fil placerar du följande kod i början och slutet av huvudfilerna som innehåller de exporterade klasserna:
#undef AFX_DATA
#define AFX_DATA AFX_EXT_DATA
// <body of your header file>
#undef AFX_DATA
#define AFX_DATA
Dessa rader säkerställer att MFC-variabler som används internt eller som läggs till i dina klasser exporteras (eller importeras) från MFC-tilläggets DLL. När du till exempel härleder en klass genom att använda DECLARE_DYNAMIC, expanderas makrot för att lägga till en CRuntimeClass medlemsvariabel i klassen. Om du utelämnar dessa fyra rader kan DLL-filen kompilera eller länka felaktigt eller orsaka ett fel när klientprogrammet länkar till DLL-filen.
Vid skapandet av DLL använder länkaren DEF-filen för att skapa en exportfil (.exp) och en importfil (.lib). Länkaren använder sedan exportfilen för att skapa DLL-filen. Körbara filer som implicit länkar till en DLL använder importbiblioteket när de skapas.
Observera att MFC själv använder DEF-filer för att exportera funktioner och klasser från MFCx0.dll.
Vad vill du göra?
Exportera C-funktioner för användning i körbara C- eller C++-språk
Importera till ett program med hjälp av __declspec(dllimport)