Bagikan melalui


Menggunakan Tipe Data Generik

Jika Anda menggunakan jenis data generik dalam kode Anda, itu dapat dikompilasi untuk Unicode hanya dengan menggunakan direktif pra-prosesor untuk menentukan "UNICODE" sebelum pernyataan #include untuk file header. Untuk mengkompilasi kode untuk halaman kode Windows (ANSI), hilangkan definisi "UNICODE". Aplikasi Windows baru harus menggunakan Unicode untuk menghindari inkonsistensi halaman kode yang bervariasi dan menyederhanakan pelokalan.

Untuk membuat kode sumber yang dapat dikompilasi baik untuk menggunakan karakter dan string Unicode atau untuk menggunakan karakter dan string dari halaman kode Windows:

  1. Gunakan jenis data generik, seperti TCHAR, LPTSTR, dan LPTCH, untuk semua jenis karakter dan string yang digunakan untuk teks. Untuk informasi selengkapnya tentang jenis generik, lihat Jenis Data Windows untuk String.

  2. Pastikan bahwa pointer ke buffer data non-teks atau array byte biner dikodekan dengan jenis data seperti LPBYTE atau LPWORD, bukan jenis LPTSTR atau LPTCH.

  3. Nyatakan pointer jenis yang tidak ditentukan secara eksplisit sebagai void pointer dengan menggunakan LPVOID yang sesuai.

  4. Buat jenis aritmetika pointer independen. Menggunakan unit ukuran TCHAR menghasilkan variabel yang 2 byte jika UNICODE ditentukan, dan 1 byte jika UNICODE tidak ditentukan. Menggunakan aritmatika penunjuk selalu mengembalikan jumlah elemen yang ditunjukkan oleh penunjuk, apakah elemen berukuran 1 atau 2 byte. Ekspresi berikut selalu mengambil jumlah elemen, terlepas dari apakah UNICODE ditentukan.

    cCount = lpEnd - lpStart;
    

    Ekspresi berikut menentukan jumlah byte yang digunakan.

    cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
    

    Tidak perlu mengubah pernyataan seperti berikut, karena kenaikan pointer menunjuk ke elemen karakter berikutnya.

    chNext = *++lpText;
    
  5. Ganti string harfiah dan konstanta karakter manifes dengan makro. Ubah ekspresi seperti berikut ini.

    while(*lpFileName++ != '\\')
    {
        // ...
    }
    

    Gunakan makro TEXT sebagai berikut dalam ekspresi ini.

    while(*lpFileName++ != TEXT('\\'))
    {
        // ...
    }
    

    Makro TEXT menyebabkan string dievaluasi sebagai L"string" ketika UNICODE didefinisikan, dan sebagai "string" jika tidak. Untuk manajemen yang lebih mudah, pindahkan string harfiah ke dalam sumber daya, terutama jika berisi karakter di luar rentang ASCII (0x00 melalui 0x7F) atau diekspos di antarmuka pengguna. Untuk mendukung pelokalan aplikasi Anda untuk berbagai bahasa nasional, sangat penting bagi semua string antarmuka pengguna untuk berada dalam sumber daya yang dapat dilokalkan.

  6. Gunakan versi generik fungsi Windows. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

  7. Gunakan versi generik dari fungsi string pustaka C standar, dan ingatlah untuk menentukan "_UNICODE" serta "UNICODE", seperti yang dibahas dalam Standard C Functions.

  8. Jika Anda mengadaptasi aplikasi yang awalnya ditulis untuk halaman kode Windows, ingatlah untuk mengubah kode apa pun yang bergantung pada 255 sebagai nilai terbesar untuk karakter.

Ketika Anda mengkompilasi kode yang telah Anda tulis seperti yang diuraikan di atas, pengkompilasi dapat membuat versi halaman kode Unicode dan Windows dari aplikasi Anda dari sumber yang sama. Bergantung pada definisi untuk UNICODE, fungsi generik diselesaikan untuk menghasilkan file biner yang sama seolah-olah Anda menulis kode secara eksklusif untuk Unicode atau secara eksklusif untuk halaman kode Windows.

Menggunakan Unicode dan Kumpulan Karakter