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 sida vid sida-sammansättning är en samling resurser – en grupp DLL:er, Windows-klasser, COM-servrar, typbibliotek eller gränssnitt – som är tillgängliga för ett program att använda vid körning. Den främsta fördelen med att paketera om DLL:er i sammansättningar är att flera versioner av sammansättningar kan användas av program samtidigt och det är möjligt att underhålla installerade sammansättningar i händelse av en uppdateringsversion.
Ett C++-program kan använda en eller flera DLL:er i olika delar av programmet. Vid körning läses DLL:erna in i huvudprocessen och den nödvändiga koden körs. Programmet förlitar sig på operativsystemet för att hitta de begärda DLL:erna, förstå vilka andra beroende DLL:er som måste läsas in och sedan läsa in dem tillsammans med den begärda DLL-filen. I Windows-operativsystemversioner som är tidigare än Windows XP, Windows Server 2003 och Windows Vista söker operativsystemets inläsare efter beroende DLL:er i antingen programmets lokala mapp eller en annan mapp som anges på systemsökvägen. I Windows XP, Windows Server 2003 och Windows Vista kan operativsystemets inläsare också söka efter beroende DLL:er med hjälp av en manifestfil och söka efter sida-vid-sida-sammansättningar som innehåller dessa DLL:er.
När en DLL skapas med Visual Studio har den som standard ett programmanifest inbäddat som en RT_MANIFEST resurs med ID lika med 2. Precis som för en körbar fil beskriver det här manifestet beroenden för denna DLL på andra sammansättningar. Detta förutsätter att DLL inte är en del av en sida-vid-sida-sammansättning och program som är beroende av denna DLL inte kommer att använda ett programmanifest för att läsa in den, utan i stället förlitar sig på operativsystemets inläsare för att hitta den här DLL:en på systemsökvägen.
Anmärkning
Det är viktigt för en DLL som använder ett programmanifest för att ha manifestet inbäddat som en resurs med ID lika med 2. Om DLL:en läses in dynamiskt vid körning (till exempel med hjälp av funktionen LoadLibrary ) läser operativsystemets inläsare in beroende sammansättningar som anges i DLL-manifestet. Ett externt programmanifest för DLL:er kontrolleras inte under ett LoadLibrary anrop. Om manifestet inte är inbäddat kan inläsaren försöka läsa in felaktiga versioner av sammansättningar eller misslyckas med att hitta beroende sammansättningar.
En eller flera relaterade DLL:er kan packas om till en sida-vid-sida-sammansättning med ett motsvarande sammansättningsmanifest, som beskriver vilka filer som utgör sammansättningen samt beroendet av sammansättningen på andra sida vid sida-sammansättningar.
Anmärkning
Om en sammansättning innehåller en DLL rekommenderar vi att du bäddar in sammansättningsmanifestet i denna DLL som en resurs med ID lika med 1 och ger den privata sammansättningen samma namn som DLL:en. Om namnet på DLL:en till exempel är mylibrary.dllkan värdet för det namnattribut som används i assemblyIdentity-elementet< i >manifestet också vara mylibrary. I vissa fall kan ett externt sammansättningsmanifest skapas när ett bibliotek har ett annat tillägg än .dll (till exempel ett MFC ActiveX Controls-projekt skapar ett .ocx-bibliotek). I det här fallet måste namnet på sammansättningen och dess manifest skilja sig från namnet på DLL:en (till exempel MyAssembly, MyAssembly.manifest och mylibrary.ocx). Vi rekommenderar dock fortfarande att du byter namn på sådana bibliotek så att de har extension.dll och bäddar in manifestet som en resurs för att minska den framtida underhållskostnaden för den här sammansättningen. Mer information om hur operativsystemet söker efter privata sammansättningar finns i Sekvens för sammansättningssökning.
Den här ändringen kan tillåta distribution av motsvarande DLL:er som en privat sammansättning i en lokal programmapp eller som en delad sammansättning i WinSxS-sammansättningscacheminnet. Flera steg måste följas för att uppnå rätt körbeteende för denna nya assembly; de beskrivs i Riktlinjer för att skapa sammansättningar sida vid sida. När en sammansättning har skapats korrekt kan den distribueras som antingen en delad eller privat sammansättning tillsammans med ett program som är beroende av den. När du installerar sammansättningar sida vid sida som en delad sammansättning kan du antingen följa riktlinjerna som beskrivs i Installera Win32-sammansättningar för sida-vid-sida-delning i Windows XP eller använda sammanslagningsmoduler. När du installerar sammansättningar parallellt som en privat sammansättning kan du enkelt kopiera motsvarande DLL, resurser och sammansättningsmanifest till programmappens lokala plats på måldatorn som en del av installationsprocessen, vilket säkerställer att denna sammansättning kan hittas av inläsaren vid körning (se Sekvens för sammansättningssökning). Ett annat sätt är att använda Windows Installer och följa riktlinjerna som beskrivs i Installera Win32-sammansättningar för privat användning av ett program i Windows XP.
Se även
Skapa C/C++-isolerade program
Skapa C/C++-isolerade program och sammansättningar sida vid sida