Kompilowanie wykonywanych jednocześnie aplikacji C/C++

Zestaw równoległy jest kolekcją zasobów — grupą bibliotek DLL, klas okien, serwerów COM, bibliotek typów lub interfejsów — dostępnych dla aplikacji do użycia w czasie wykonywania. Główną zaletą ponownego pakowania bibliotek DLL w zestawach jest to, że wiele wersji zestawów może być używanych przez aplikacje w tym samym czasie i istnieje możliwość obsługi obecnie zainstalowanych zestawów w przypadku wydania aktualizacji.

Aplikacja C++ może używać jednej lub kilku bibliotek DLL w różnych częściach aplikacji. W czasie wykonywania biblioteki DLL są ładowane do głównego procesu, a wymagany kod jest wykonywany. Aplikacja opiera się na systemie operacyjnym, aby zlokalizować żądane biblioteki DLL, zrozumieć, jakie inne zależne biblioteki DLL muszą zostać załadowane, a następnie załadować je razem z żądaną biblioteką DLL. W systemach operacyjnych Windows w wersjach starszych niż Windows XP, Windows Server 2003 i Windows Vista moduł ładujący systemu operacyjnego wyszukuje zależne biblioteki DLL w folderze lokalnym aplikacji lub innym folderze określonym w ścieżce systemowej. W systemach Windows XP, Windows Server 2003 i Windows Vista moduł ładujący systemu operacyjnego może również wyszukiwać zależne biblioteki DLL przy użyciu pliku manifestu i wyszukiwać zestawy równoległe zawierające te biblioteki DLL.

Domyślnie, gdy biblioteka DLL jest kompilowana przy użyciu programu Visual Studio, ma manifest aplikacji osadzony jako zasób RT_MANIFEST o identyfikatorze równym 2. Podobnie jak w przypadku pliku wykonywalnego, w tym manifeście opisano zależności tej biblioteki DLL w innych zestawach. Przyjęto założenie, że biblioteka DLL nie jest częścią zestawu równoległego i aplikacji, które zależą od tej biblioteki DLL, nie będą używać manifestu aplikacji do jego załadowania, ale zamiast tego polegają na modułu ładującego systemu operacyjnego, aby znaleźć tę bibliotekę DLL na ścieżce systemowej.

Uwaga

Ważne jest, aby biblioteka DLL używająca manifestu aplikacji miała manifest osadzony jako zasób o identyfikatorze równym 2. Jeśli biblioteka DLL jest dynamicznie ładowana w czasie wykonywania (na przykład przy użyciu funkcji LoadLibrary), moduł ładujący systemu operacyjnego ładuje zestawy zależne określone w manifeście biblioteki DLL. Zewnętrzny manifest aplikacji dla bibliotek DLL nie jest sprawdzany podczas wywołania LoadLibrary . Jeśli manifest nie jest osadzony, moduł ładujący może próbować załadować nieprawidłowe wersje zestawów lub nie można odnaleźć zestawów zależnych.

Jeden lub kilka powiązanych bibliotek DLL można ponownie pakować do zestawu równoległego z odpowiednim manifestem zestawu, który opisuje, które pliki tworzą zestaw, a także zależność zestawu od innych zestawów równoległych.

Uwaga

Jeśli zestaw zawiera jedną bibliotekę DLL, zaleca się osadzanie manifestu zestawu w tej biblioteki DLL jako zasobu o identyfikatorze równym 1 i nadanie zestawowi prywatnemu takiej samej nazwy jak biblioteka DLL. Jeśli na przykład nazwa biblioteki DLL to mylibrary.dll, wartość atrybutu name używanego w <elemecie assemblyIdentity> manifestu może być również mylibrary. W niektórych przypadkach, gdy biblioteka ma rozszerzenie inne niż .dll (na przykład projekt kontrolek ActiveX MFC tworzy bibliotekę ocx), można utworzyć zewnętrzny manifest zestawu. W takim przypadku nazwa zestawu i jego manifest muszą być inne niż nazwa biblioteki DLL (na przykład MyAssembly, MyAssembly.manifest i mylibrary.ocx). Jednak nadal zaleca się zmianę nazw takich bibliotek na extension.dll i osadzanie manifestu jako zasobu w celu zmniejszenia przyszłego kosztu konserwacji tego zestawu. Aby uzyskać więcej informacji na temat wyszukiwania zestawów prywatnych przez system operacyjny, zobacz Sekwencja wyszukiwania zestawów.

Ta zmiana może zezwalać na wdrażanie odpowiednich bibliotek DLL jako zestawu prywatnego w folderze lokalnym aplikacji lub jako zestaw udostępniony w pamięci podręcznej zestawów WinSxS. Aby osiągnąć poprawne zachowanie tego nowego zestawu, należy wykonać kilka kroków; opisano je w wytycznych dotyczących tworzenia zestawów side-by-side. Po poprawnym utworzeniu zestawu można go wdrożyć jako zestaw udostępniony lub prywatny razem z aplikacją, która jest od niej zależna. Podczas instalowania zestawów równoległych jako zestawu współużytkowanego można postępować zgodnie z wytycznymi opisanymi w temacie Instalowanie zestawów Win32 na potrzeby współużytkowania równoległego w systemie Windows XP lub użyć modułów scalania. Podczas instalowania zestawów równoległych jako zestawu prywatnego można po prostu skopiować odpowiednią bibliotekę DLL, zasoby i manifest zestawu w ramach procesu instalacji do folderu lokalnego aplikacji na komputerze docelowym, zapewniając, że ten zestaw można znaleźć przez moduł ładujący w czasie wykonywania (zobacz Sekwencja wyszukiwania zestawów). Innym sposobem jest użycie Instalatora Windows i przestrzeganie wytycznych opisanych w temacie Instalowanie zestawów Win32 na potrzeby prywatnego używania aplikacji w systemie Windows XP.

Zobacz też

Kompilowanie izolowanych aplikacji C/C++
Kompilowanie aplikacji izolowanych C/C++ oraz aplikacji wykonywanych równocześnie