État mondial dans la CRTGlobal state in the CRT

Certaines fonctions de l’Universal C Runtime (UCRT) utilisent l’état mondial.Some functions in the Universal C Runtime (UCRT) use global state. Par exemple, setlocale() définit le local pour l’ensemble du programme, qui affecte les séparateurs de chiffres, la page de code de texte, et ainsi de suite.For example, setlocale() sets the locale for the entire program, which affects the digit separators, text code page, and so on.

L’état mondial de l’UCRT n’est pas partagé entre les applications et le système d’exploitation.The UCRT's global state is not shared between applications and the OS. Par exemple, si setlocale()votre application appelle, elle n’affectera pas le lieu pour les composants OS qui utilise le temps d’exécution C, ou vice-versa.For example, if your application calls setlocale(), it won't affect the locale for any OS components that uses the C run-time, or vice-versa.

Versions spécifiques à l’OS des fonctions CRTOS-specific versions of CRT functions

Dans l’UCRT, les fonctions qui interagissent avec l’État _o_mondial ont une fonction « jumelle », préfixée avec .In the UCRT, functions that interact with global state have a "twin" function, prefixed with _o_. Par exemple :For example:

  • setlocale()affecte l’état global spécifique à l’application.setlocale() affects global state specific to the app.
  • _o_setlocale()affecte l’état mondial partagé par tous les composants OS, mais pas les applications._o_setlocale() affects global state shared by all OS components, but not apps.

La seule différence entre ces fonctions "jumelles" est que lorsqu’ils lisent/écrivent l’état global CRT, les versions spécifiques à l’OS (c’est-à-dire les versions qui commencent par _o_) utilisent la copie OS de l’état global au lieu de la copie de l’application de l’état mondial.The only difference between these "twin" functions is that when they read/write the global CRT state, the OS-specific versions (that is, the versions that start with _o_) use the OS copy of global state instead of the app's copy of global state.

Les versions spécifiques à l’OS ucrt.osmode.libde ces fonctions sont en .The OS-specific versions of these functions are in ucrt.osmode.lib. Par exemple, la version spécifique setlocale() à l’OS de_o_setlocale()For example, the OS-specific version of setlocale() is _o_setlocale()

Il existe deux façons d’isoler l’état CRT de votre composant de l’état CRT d’une application :There are two ways to isolate your component's CRT state from an app's CRT state:

  • Lien statiquez votre composant en utilisant des options de compilateur /MT (libération) ou MTd (debug).Statically link your component by using compiler options /MT (release) or MTd (debug). Pour plus de détails, voir /MD, /MT, /LD.For details, see /MD, /MT, /LD. Notez que la liaison statique peut augmenter considérablement la taille binaire.Note that static linking can greatly increase binary size.
  • En commençant par Windows 10 20H2, obtenir l’isolement de l’état CRT en reliant dynamiquement à la CRT, mais appelez les exportations de mode OS (les fonctions qui commencent par o).Starting with Windows 10 20H2, get CRT state isolation by dynamically linking to the CRT but call the OS-mode exports (the functions that begin with o). Pour appeler les exportations de mode OS, lien statique comme avant, /NODEFAULTLIB:libucrt.lib mais ignorer /NODEFAULTLIB:libucrtd.lib l’UCRT statique en utilisant l’option de liaison (libération) ou (debug) Voir /NODEFAULTLIB (Ignorer les bibliothèques) pour plus de détails.To call the OS-mode exports, statically link as before, but ignore the static UCRT by using linker option /NODEFAULTLIB:libucrt.lib (release) or /NODEFAULTLIB:libucrtd.lib (debug) See /NODEFAULTLIB (Ignore Libraries) for details. Et ucrt.osmode.lib ajouter à l’entrée linker.And add ucrt.osmode.lib to the linker input.

Notes

Dans le code setlocale()source, écrire , pas _o_setlocale().In source code, write setlocale(), not _o_setlocale(). Lorsque vous ucrt.osmode.libliez contre, le lien remplacera automatiquement la version spécifique à l’OS de la fonction.When you link against ucrt.osmode.lib, the linker will automatically substitute the OS-specific version of the function. setlocale() C’est-à-dire, _o_setlocale()sera remplacé par .That is, setlocale() will be substituted with _o_setlocale().

Liaison ucrt.osmode.lib contre les désactiver certains appels UCRT qui ne sont disponibles qu’en mode application.Linking against ucrt.osmode.lib disables some UCRT calls that are only available in app mode. Tenter de les appeler entraînera une erreur de lien.Attempting to call these will result in a link error.

État mondial affecté par la séparation app/OSGlobal state affected by app/OS separation

L’état mondial affecté par la séparation de l’application et de l’état d’OS comprend :Global state affected by the separation of app and OS state includes:

Voir aussiSee also

C Référence de bibliothèque Run-TimeC Run-Time library reference