Sdílet prostřednictvím


Použití modulu Microsoft C Runtime s ovladači User-Mode a desktopovými aplikacemi

Pokud vytváříte aplikace nebo ovladače pro Windows 10, musíte si přečíst jenom tuto část. Pokud používáte verzi sady Visual Studio starší než Visual Studio 2015, přeskočte tuto část a začněte Redistributing the C Runtime (platí pro před visual Studio 2015).

Počínaje sadou Visual Studio 2015 zahrnuje Modul runtime C (UCRT) modul runtime jazyka C. Ostatní součásti vyžadované pro kompletní program (funkce jazyka C/C++, knihovna C++) poskytuje Visual Studio v distribuovatelném programu VC++. Aby se zabránilo požadavkům na redistribuci modulu runtime, jsou tyto části staticky propojené.

Varování

Pokud při sestavování projektu ovladače uživatelského režimu v sadě Visual Studio nastavíte PlatformToolset na WindowsUserModeDriver10.0, sada nástrojů ignoruje všechny knihovny modulu runtime zadané v projektu a místo toho propojí staticky s modulem runtime VC++ a dynamicky proti UCRT. Při použití této sady nástrojů nelze toto chování hybridního propojení překonfigurovat.

Pokud sadu nástrojů WindowsUserModeDriver10.0 nepoužíváte, proveďte úpravy pomocí následujícího postupu (například zahrnout jinou knihovnu DLL):

  1. Nastavení na obecné statické propojení: Vlastnosti > C/C++ > Generování kódu > Knihovna modulu runtime = vícevláknová (/MT)
  2. Odeberte staticky připojené UCRT: Vlastnosti > Linker > Vstup > Ignorovat konkrétní výchozí knihovny += libucrt.lib
  3. Přidejte dynamicky propojené UCRT: Vlastnosti > Linker > Input > Additional Dependencies += ucrt.lib, Properties > Linker > Input > Ignore Specific Default Libraries += libucrt.libucrt.lib

Redistribuce běhové knihovny C (platí pro před Visual Studio 2015)

Poznámka:

Všechny informace pod tímto bodem platí pouze pro před-2015. Před 2015mi byly dvě samostatné verze modulu C Runtime: Visual C++ Runtime (VCRT, například msvcr120.dll) a starší verze Windows CRT (msvcrt.dll).

Visual Studio nainstaluje nejnovější verzi VCRT do adresáře System32. Pokud soubor není v tomto umístění, můžete ho zkopírovat přímo do adresáře sestavení projektu Visual C++.

Pokud ovladač uživatelského režimu nebo desktopová aplikace používají VCRT, musíte distribuovat příslušné knihovny dynamického propojení. Použití distribuovatelného balíčku Visual C++ (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_arm.exe). Zřetězte distribuovatelný balíček s dalšími binárními soubory a distribuovatelný balíček obdrží automatické aktualizace.

Pokud chcete dosáhnout izolace nebo se vyhnout závislosti na balíčku VC++ Redistributable, můžete místo toho použít statické propojení s CRT. I když projekty, které nejsou ovladači, obvykle mohou zkopírovat specifické knihovny DLL pro Visual C/C++ do lokální složky aplikace (kde je aplikace nainstalována), aby se vyhnuly závislosti na redistribuovatelném balíčku VC++, lokální nasazení není vhodné pro ovladač.

Nekopírujte jednotlivé komponenty CRT do System32 místo použití distribuovatelného balíčku. To může způsobit, že CRT nebude automaticky obsluhována a možná může být přepsána.

Pro ovladače tiskárny platí následující zvláštní aspekty:

  • Tyto ovladače by měly obsahovat požadované soubory CRT v INF, takže soubory CRT se zkopírují do úložiště ovladačů jako součást balíčku ovladače.
  • Ovladače tisku V4 nemůžou pro instalaci použít spoluinstalátor, takže inf musí kopírovat relevantní binární soubory knihovny modulu runtime C/C++ do úložiště ovladačů. Chcete-li to provést, odkazujte na příslušné soubory v [COPY_FILES] části balíčku ovladače.
  • Ovladače tisku V3 by neměly pro instalaci používat spoluspouštěné instalační programy, protože se nespouští při připojení prostřednictvím Point and Print. Tyto ovladače by měly odkazovat na příslušné soubory v [COPY_FILES] části balíčku ovladače.

Následuje příklad zahrnutí binárních souborů CRT do [COPY_FILES] oddílu INF:

[COPY_FILES]
;CRT
Msvcr120.dll
; other files

* [SourceDisksFiles]
Msvcr120.dll = 2 
; other files

* [SourceDisksNames.amd64]
1 = %Location%,,,
2 = %Location%,,,"amd64"

Pro ovladače UMDF:

  • Staticky spojte váš ovladač s CRT, abyste zahrnuli runtime do binárního souboru. V takovém případě není nutné redistribuovat CRT.

Propojení vašeho kódu s knihovnami běhového prostředí C (platí pro verze před Visual Studio 2015)

Chcete-li zjistit, které knihovny DLL musíte distribuovat s vaší aplikací, shromážděte seznam knihoven DLL, na kterých vaše aplikace závisí. Jedním ze způsobů, jak tento seznam shromáždit, je spustit Dependency Walker (depends.exe).

Další informace naleznete v tématu Určení knihoven DLL k redistribuci a Volba metody nasazení.

Nelze distribuovat všechny soubory, které jsou součástí sady Visual Studio; Smíte distribuovat pouze soubory zadané v Redistributable Code for Visual Studio 2013 Preview a Visual Studio 2013 SDK Preview. Ladicí verze aplikací a různé dynamické knihovny Visual C++ nejsou redistribuovatelné.

Následující knihovny obsahují funkce knihovny runtime jazyka C:

termín Popis
Msvcr120.dll Modul runtime jazyka C
Msvcp120.dll Rozhraní runtime C++
Msvcr120d.dll Ladicí verze modulu runtime pro C – redistribuce není povolena.
Msvcp120d.dll Ladicí verze modulu runtime C++ – redistribuce není povolena