Ringkasan Pemrograman Unicode
Untuk memanfaatkan dukungan run-time MFC dan C untuk Unicode, Anda perlu:
Tentukan
_UNICODE
.Tentukan simbol
_UNICODE
sebelum Anda membangun program Anda.Tentukan titik masuk.
Pada halaman Tingkat Lanjut folder Linker dalam kotak dialog Halaman Properti proyek, atur simbol Titik Masuk ke
wWinMainCRTStartup
.Gunakan fungsi dan jenis run-time portabel.
Gunakan fungsi run-time C yang tepat untuk penanganan string Unicode. Anda dapat menggunakan
wcs
keluarga fungsi, tetapi Anda mungkin lebih suka makro yang sepenuhnya portabel (diaktifkan_TCHAR
secara internasional). Makro ini semua diawali dengan_tcs
; mereka menggantikan, satu untuk satu, untukstr
keluarga fungsi. Fungsi-fungsi ini dijelaskan secara rinci di bagian Internasionalisasi dari Referensi Pustaka Run-Time. Untuk informasi selengkapnya, lihat Pemetaan Teks Generik di tchar.h.Gunakan
_TCHAR
dan jenis data portabel terkait yang dijelaskan dalam Dukungan untuk Unicode.Tangani string harfiah dengan benar.
Pengkompilasi Visual C++ menginterpretasikan string harfiah yang dikodekan sebagai:
L"this is a literal string"
untuk berarti string karakter Unicode. Anda dapat menggunakan awalan yang sama untuk karakter harfiah.
_T
Gunakan makro untuk mengodekan string harfiah secara generis, sehingga dikompilasi sebagai string Unicode di bawah Unicode atau sebagai string ANSI (termasuk MBCS) tanpa Unicode. Misalnya, sebagai ganti dari:pWnd->SetWindowText( "Hello" );
gunakan:
pWnd->SetWindowText( _T("Hello") );
Dengan
_UNICODE
didefinisikan,_T
menerjemahkan string harfiah ke formulir awalan L; jika tidak,_T
menerjemahkan string tanpa awalan L.Tip
_T
Makro identik dengan_TEXT
makro.Hati-hati meneruskan panjang string ke fungsi.
Beberapa fungsi menginginkan jumlah karakter dalam string; yang lain menginginkan jumlah byte. Misalnya, jika
_UNICODE
ditentukan, panggilan berikut keCArchive
objek tidak akan berfungsi (str
adalahCString
):archive.Write( str, str.GetLength( ) ); // invalid
Dalam aplikasi Unicode, panjangnya memberi Anda jumlah karakter tetapi bukan jumlah byte yang benar, karena setiap karakter memiliki lebar 2 byte. Sebagai gantinya, Anda harus menggunakan:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid
yang menentukan jumlah byte yang benar untuk ditulis.
Namun, fungsi anggota MFC yang berorientasi karakter, bukan berorientasi byte, bekerja tanpa pengkodan tambahan ini:
pDC->TextOut( str, str.GetLength( ) );
CDC::TextOut
mengambil sejumlah karakter, bukan sejumlah byte.Gunakan fopen_s, _wfopen_s untuk membuka file Unicode.
Untuk meringkas, MFC dan pustaka run-time menyediakan dukungan berikut untuk pemrograman Unicode:
Kecuali untuk fungsi anggota kelas database, semua fungsi MFC diaktifkan Unicode, termasuk
CString
.CString
juga menyediakan fungsi konversi Unicode/ANSI.Pustaka run-time menyediakan versi Unicode dari semua fungsi penanganan string. (Pustaka run-time juga menyediakan versi portabel yang cocok untuk Unicode atau untuk MBCS. Ini adalah
_tcs
makro.)tchar.h menyediakan jenis data portabel dan
_T
makro untuk menerjemahkan string dan karakter harfiah. Untuk informasi selengkapnya, lihat Pemetaan Teks Generik di tchar.h.Pustaka run-time menyediakan versi karakter luas dari
main
. Gunakanwmain
untuk membuat aplikasi Anda sadar Unicode.