Makro konfigurasi C++/WinRT

Topik ini menjelaskan makro konfigurasi C++/WinRT. Kecuali dinyatakan lain, aturan ini berlaku untuk semua makro konfigurasi C++/WinRT:

  • Semua file yang ditautkan bersama untuk membentuk satu modul (.exe atau .dll) harus memiliki pengaturan makro yang identik. Itu termasuk pustaka statis.
  • Semua pengaturan makro harus selesai sebelum menyertakan file header C++/WinRT apa pun.
  • Anda tidak boleh mengubah pengaturan makro apa pun setelah menyertakan file header C++/WinRT apa pun.

WINRT_LEAN_AND_MEAN

Jika ditentukan, nonaktifkan fitur yang jarang digunakan ini (untuk mengurangi waktu kompilasi):

  • Kemampuan untuk mengimplementasikan antarmuka eksklusif di luar komponen.
  • spesialisasi std::hash untuk pointer cerdas antarmuka dan kelas runtime.
  • Dukungan untuk langsung mengeluarkan output hstring atau IStringable ke stream C++, mulai versi 2.0.221101.3.

Anda diizinkan untuk menggabungkan file dengan pengaturan yang berbeda untuk WINRT_LEAN_AND_MEAN.

File yang tidak menentukan WINRT_LEAN_AND_MEAN mendapatkan akses ke fitur yang jarang digunakan.

WINRT_NO_MODULE_LOCK

Jika ditentukan, menonaktifkan jumlah objek untuk modul saat ini. Modul tidak pernah dikeluarkan dari proses. Mendefinisikan makro ini lazim dilakukan untuk file eksekusi (yang tidak pernah dapat dibongkar dari memori), atau untuk .dll yang ingin Anda biarkan tetap dimuat. Tidak boleh digabungkan dengan WINRT_CUSTOM_MODULE_LOCK.

WINRT_CUSTOM_MODULE_LOCK

Jika ditentukan, memungkinkan Anda untuk memberikan implementasi Winrt::get_module_lock Anda sendiri. Tidak dapat digunakan bersama dengan WINRT_NO_MODULE_LOCK.

Implementasi kustom Winrt::get_module_lock Anda harus mendukung operasi berikut:

  • ++winrt::get_module_lock(): Tingkatkan jumlah referensi pada kunci modul.
  • --winrt::get_module_lock(): Kurangi jumlah referensi pada kunci modul.
  • if (winrt::get_module_lock()): Periksa apakah jumlah referensi bukan nol. (Diperlukan jika Anda membangun DLL.)

WINRT_ASSERT, WINRT_VERIFY

Makro ini memungkinkan Anda menyesuaikan penanganan pernyataan. WINRT_ASSERT tidak memerlukan argumen untuk dievaluasi. WINRT_VERIFY mengharuskan argumen dievaluasi, bahkan dalam build non-debug.

Jika Anda tidak menyesuaikan makro ini, dan _DEBUG ditentukan, C++/WinRT membuatnya setara dengan _ASSERTE.

Jika Anda tidak menyesuaikan makro ini, dan _DEBUG tidak ditentukan, maka C++/WinRT menentukan WINRT_ASSERT untuk membuang ekspresi yang tidak dievaluasi, dan menentukan WINRT_VERIFY untuk membuang ekspresi setelah mengevaluasinya.

WINRT_NO_MAKE_DETECTION

Jika ditentukan, menonaktifkan diagnostik C++/WinRT default yang mendeteksi bahwa Anda salah membuat kelas implementasi tanpa menggunakan winrt::make.

Kami sangat menyarankan agar Anda tidak menentukan simbol ini, karena melakukannya menutupi sumber umum kesalahan pemrograman.

WINRT_NO_SOURCE_LOCATION

Jika disetel, menonaktifkan penyertaan informasi file sumber dan nomor baris (serta, dalam build debug, informasi fungsi) saat kesalahan dihasilkan.

Informasi tambahan ini tidak digunakan oleh C++/WinRT, tetapi tersedia untuk pustaka lain yang ingin beroperasi dengan pengecualian C++/WinRT, seperti Pustaka Implementasi Windows.

Secara default, informasi disertakan saat dikompilasi dalam mode C++20 atau yang lebih tinggi. Anda mungkin ingin menekan informasi ini untuk mengurangi ukuran biner.

WINRT_DIAGNOSTICS

Jika ditentukan, memungkinkan statistik internal untuk melacak berbagai operasi:

  • Jumlah kali setiap antarmuka diakses.
  • Frekuensi setiap pabrik diminta (dan apakah pabrik tangkas).

WINRT_NATVIS

Jika ditentukan, sertakan fungsi pembantu untuk membantu dalam visualisasi debug asli di Visual Studio. Kode tidak digunakan saat dijalankan; kode ini hanya digunakan untuk penelusuran kesalahan.

Jika Anda tidak menyesuaikan makro ini, fungsi dukungan visualisasi diaktifkan jika _DEBUG ditentukan. Untuk detail selengkapnya, lihat Visual Studio visualisasi debug asli (natvis) untuk C++/WinRT.

Anda diizinkan untuk menggabungkan file dengan pengaturan yang berbeda untuk WINRT_NATVIS.

Jika ada file yang dikompilasi dengan dukungan WINRT_NATVIS , maka modul yang dihasilkan akan mengaktifkan visualisasi debug asli.

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Jangan gunakan makro ini.