Titik masuk aplikasi WinMain
Setiap program Windows menyertakan fungsi titik masuk bernama WinMain atau wWinMain. Kode berikut menunjukkan tanda tangan untuk wWinMain:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
Empat parameter wWinMain adalah sebagai berikut:
- hInstance adalah handel ke instans atau handel ke modul. Sistem operasi menggunakan nilai ini untuk mengidentifikasi executable atau EXE saat dimuat dalam memori. Fungsi Windows tertentu memerlukan handel instans, misalnya untuk memuat ikon atau bitmap.
- hPrevInstance tidak memiliki arti. Ini digunakan dalam Windows 16-bit, tetapi sekarang selalu nol.
- pCmdLine berisi argumen baris perintah sebagai string Unicode.
- nCmdShow adalah bendera yang menunjukkan apakah jendela aplikasi utama diminimalkan, dimaksimalkan, atau ditampilkan secara normal.
Fungsi mengembalikan int
nilai. Sistem operasi tidak menggunakan nilai pengembalian, tetapi Anda dapat menggunakan nilai untuk meneruskan kode status ke program lain.
Konvensi panggilan, seperti WINAPI
, menentukan bagaimana fungsi menerima parameter dari pemanggil. Misalnya, konvensi panggilan menentukan urutan kemunculan parameter pada tumpukan. Pastikan untuk mendeklarasikan fungsi wWinMain Anda seperti yang ditunjukkan pada contoh sebelumnya.
Fungsi WinMain sama dengan wWinMain, kecuali argumen baris perintah diteruskan sebagai string ANSI. String Unicode lebih disukai. Anda dapat menggunakan fungsi ANSI WinMain meskipun Anda mengkompilasi program Anda sebagai Unicode. Untuk mendapatkan salinan Unicode dari argumen baris perintah, panggil fungsi GetCommandLine . Fungsi ini mengembalikan semua argumen dalam satu string. Jika Anda menginginkan argumen sebagai array gaya argv, teruskan string ini ke CommandLineToArgvW.
Bagaimana pengkompilasi tahu untuk memanggil wWinMain alih-alih fungsi utama standar? Apa yang sebenarnya terjadi adalah bahwa pustaka runtime Microsoft C (CRT) menyediakan implementasi utama yang memanggil WinMain atau wWinMain.
CRT melakukan beberapa pekerjaan lagi di dalam main. Misalnya, ini memanggil inisialisasi statis apa pun sebelum wWinMain. Meskipun Anda dapat memberi tahu linker untuk menggunakan fungsi titik entri yang berbeda, Anda harus menggunakan default jika Anda menautkan ke CRT. Jika tidak, kode inisialisasi CRT dilewati, dengan hasil yang tidak dapat diprediksi seperti objek global tidak diinisialisasi dengan benar.
Kode berikut menunjukkan fungsi WinMain kosong:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow)
{
return 0;
}
Sekarang setelah Anda memiliki titik masuk dan memahami beberapa konvensi terminologi dan pengkodian dasar, Anda siap untuk Membuat program Windows pertama Anda.