Konvensi untuk Prototipe Fungsi

Windows SDK menyediakan prototipe fungsi dalam versi generik, halaman kode Windows, dan Unicode . Prototipe dapat dikompilasi untuk menghasilkan prototipe halaman kode Windows atau prototipe Unicode. Ketiga prototipe dibahas dalam topik ini dan diilustrasikan oleh sampel kode untuk fungsi SetWindowText .

Berikut ini adalah contoh prototipe generik.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

File header menyediakan nama fungsi generik yang diimplementasikan sebagai makro.

#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE

Praprosesor memperluas makro ke halaman kode Windows atau nama fungsi Unicode. Huruf "A" (ANSI) atau "W" (Unicode) ditambahkan di akhir nama fungsi generik, yang sesuai. File header kemudian menyediakan dua prototipe tertentu, satu untuk halaman kode Windows dan satu untuk Unicode, seperti yang ditunjukkan dalam contoh berikut.

BOOL SetWindowTextA(
  HWND hwnd,
  LPCSTR lpText
);
BOOL SetWindowTextW(
  HWND hwnd,
  LPCWSTR lpText
);

Seperti yang dijelaskan dalam Jenis Data Windows untuk String, prototipe fungsi generik menggunakan jenis data LPCTSTR untuk parameter teks. Namun, prototipe halaman kode Windows menggunakan jenis LPCSTR, dan prototipe Unicode menggunakan LPCWSTR.

Untuk semua fungsi dengan argumen teks, aplikasi biasanya harus menggunakan prototipe fungsi generik. Jika aplikasi mendefinisikan "UNICODE" baik sebelum pernyataan #include untuk file header atau selama kompilasi, pernyataan akan dikompilasi ke dalam fungsi Unicode.

Catatan

Aplikasi Windows baru harus menggunakan Unicode untuk menghindari inkonsistensi halaman kode yang bervariasi dan untuk kemudahan pelokalan. Mereka harus ditulis dengan fungsi generik, dan harus menentukan UNICODE untuk mengkompilasi fungsi ke dalam fungsi Unicode. Di beberapa tempat di mana aplikasi harus bekerja dengan data karakter 8-bit, aplikasi dapat menggunakan fungsi secara eksplisit untuk halaman kode Windows.

 

Aplikasi Anda harus selalu menggunakan prototipe fungsi generik dengan string generik dan jenis karakter. Semua nama fungsi yang diakhir dengan huruf besar "W" mengambil Unicode, yaitu, karakter lebar, parameter. Beberapa fungsi hanya ada dalam versi Unicode dan hanya dapat digunakan dengan jenis data yang sesuai. Misalnya, LCIDToLocaleName dan LocaleNameToLCID hanya memiliki versi Unicode.

Bagian Persyaratan dalam dokumentasi referensi untuk setiap Unicode dan fungsi set karakter menyediakan informasi tentang versi fungsi yang diterapkan oleh sistem operasi yang didukung. Jika baris yang dimulai dengan "Unicode" disertakan, fungsi memiliki versi halaman kode Unicode dan Windows yang terpisah.

Catatan

Saat fungsi memiliki parameter panjang untuk string karakter, panjangnya harus di dokumentasikan sebagai hitungan nilai TCHAR dalam string. Jenis data ini mengacu pada byte untuk versi halaman kode Windows dari fungsi atau kata 16-bit untuk versi Unicode. Namun, fungsi yang memerlukan atau mengembalikan pointer ke blok memori yang tidak diketik, seperti fungsi GlobalAlloc , umumnya mengambil ukuran dalam byte, terlepas dari prototipe yang digunakan. Jika alokasi memori yang tidak dijenis adalah untuk string, aplikasi harus mengalikan jumlah karakter berdasarkan sizeof(TCHAR). Untuk informasi tambahan, lihat Menggunakan Jenis Data Generik.

 

Unicode di Windows API