Aracılığıyla paylaş


CRT'deki genel durum

Evrensel C Çalışma Zamanı'ndaki (UCRT) bazı işlevler genel durumu kullanır. Örneğin, setlocale() basamak ayırıcılarını, metin kodu sayfasını vb. etkileyen tüm programın yerel ayarını ayarlar.

UCRT'nin genel durumu uygulamalar ve işletim sistemi arasında paylaşılamaz. Örneğin, uygulamanız öğesini çağırırsa setlocale(), C çalışma zamanını kullanan işletim sistemi bileşenlerinin yerel ayarını etkilemez veya tam tersi olur.

CRT işlevlerinin işletim sistemine özgü sürümleri

UCRT'de, genel durumla etkileşim kuran işlevlerin ön eki ile _o_önekli bir "ikiz" işlevi vardır. Örneğin:

  • setlocale() uygulamaya özgü genel durumu etkiler.
  • _o_setlocale() tüm işletim sistemi bileşenleri tarafından paylaşılan genel durumu etkiler, ancak uygulamalar tarafından paylaşılmaz.

Bu "ikiz" işlevler arasındaki tek fark, genel CRT durumunu okuduklarında/yazdıklarında, işletim sistemine özgü sürümlerin (yani ile _o_başlayan sürümler) uygulamanın genel durum kopyası yerine genel durumun işletim sistemi kopyasını kullanmasıdır.

Bu işlevlerin işletim sistemine özgü sürümleri içindedir ucrt.osmode.lib. Örneğin işletim sistemine özgü sürümü setlocale()_o_setlocale()

Bileşeninizin CRT durumunu bir uygulamanın CRT durumundan yalıtmanın iki yolu vardır:

  • Derleyici seçeneklerini /MT (yayın) veya /MTd (hata ayıklama) kullanarak bileşeninizi statik olarak bağlayın. Ayrıntılar için bkz. /MD, /MT, /LD. Statik bağlama, ikili boyutu büyük ölçüde artırabilir.
  • Windows 10 sürüm 2004 ile başlayan Windows sürümlerinden başlayarak, CRT'ye dinamik olarak bağlanın, ancak işletim sistemi modu dışarı aktarmalarını (o ile başlayan işlevler) çağırın. İşletim sistemi modu dışarı aktarmalarını çağırmak için, daha önce olduğu gibi statik olarak bağlayın, ancak bağlayıcı seçeneğini /NODEFAULTLIB:libucrt.lib (yayın) veya /NODEFAULTLIB:libucrtd.lib (hata ayıklama) kullanarak statik UCRT'yi yoksayın. Ve bağlayıcı girişine ekleyin ucrt.osmode.lib . Ayrıntılar için bkz /NODEFAULTLIB . (Kitaplıkları Yoksay).

Not

Kaynak kodunda yazın, setlocale()yazın._o_setlocale() ile ucrt.osmode.libbağlantı oluşturduğunuzda bağlayıcı otomatik olarak işlevin işletim sistemine özgü sürümünün yerini alır. Yani, setlocale() ile _o_setlocale()değiştirilecektir.

ile bağlantı, ucrt.osmode.lib yalnızca uygulama modunda kullanılabilen bazı UCRT çağrılarını devre dışı bırakır. Bu işlevleri çağırmaya çalışmak bağlantı hatasına neden olur.

Uygulama/işletim sistemi ayrımlarından etkilenen genel durum

Uygulama ve işletim sistemi durumunun ayrılmasının etkilediği genel durum şunları içerir:

Ayrıca bkz.

C Çalışma Zamanı kitaplığı başvurusu