Pertama-tama, apa itu sebenarnya? Saya kira ini adalah sebuah pointer (LPC berarti konstanta pointer panjang), tapi apa artinya "W"? Apakah itu penunjuk khusus ke string atau penunjuk ke string tertentu? Misalnya saya ingin menutup Window bernama "TestWindow".
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
Kode ini ilegal dan tidak berfungsi karena const char [6] tidak dapat dikonversi ke CONST WCHAR. Saya tidak mengerti sama sekali. Saya ingin mendapatkan pemahaman yang jelas tentang semua LPCWSTR, LPCSTR, LPSTR ini. Saya mencoba mencari sesuatu, namun saya semakin bingung. Di situs msdn FindWindowEx
dideklarasikan sebagai
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Jadi parameter terakhir adalah LPCSTR, dan permintaan compiler pada LPCWSTR. Tolong bantu.
Jawaban:
LPCWSTR
singkatan dari "Long Pointer to Constant Wide String". W singkatan dari Wide dan berarti bahwa string disimpan dalam karakter 2 byte vs. normalchar
. Umum untuk semua kode C / C ++ yang harus berurusan dengan string khusus non-ASCII. =Untuk mendapatkan string literal C normal untuk ditetapkan ke a
LPCWSTR
, Anda perlu mengawalnya dengan L.LPCWSTR a = L"TestWindow";
sumber
SPCWSTR
.36UL
di C # sama dengan(ulong)36
(ulong adalah integer 64-bit unsigned).@
dapat digunakan dalam bahasa yang sama sebagai awalan untuk string, mengubah sedikit penguraiannya.LPCWSTR
setara denganwchar_t const *
. Ini adalah penunjuk ke string karakter lebar yang tidak akan diubah oleh pemanggilan fungsi.Anda dapat menetapkan ke
LPCWSTR
s dengan menambahkan L ke string literal:LPCWSTR *myStr = L"Hello World";
LPC T STR dan tipe T lainnya , gunakan tipe string tergantung pada pengaturan Unicode untuk proyek Anda. Jika
_UNICODE
ditentukan untuk proyek Anda, penggunaan tipe T sama dengan bentuk karakter lebar, sebaliknya bentuk Ansi. Fungsi yang sesuai juga akan disebut dengan cara ini:FindWindowEx
didefinisikan sebagaiFindWindowExA
atauFindWindowExW
tergantung pada definisi ini.sumber
Ini adalah penunjuk panjang ke string lebar yang konstan (yaitu string karakter lebar).
Karena itu string lebar, Anda ingin membuat tampilan konstan seperti:
L"TestWindow"
. Saya juga tidak akan membuat perantaraa
, saya hanya akan meneruskanL"TestWindow"
parameter:ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
Jika Anda ingin mengoreksi secara pedantis, "LPCTSTR" adalah string "teks" - string lebar dalam build Unicode dan string sempit dalam build ANSI, jadi Anda harus menggunakan makro yang sesuai:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Hanya sedikit orang yang peduli tentang memproduksi kode yang dapat dikompilasi untuk set karakter Unicode dan ANSI, dan jika Anda tidak membuatnya benar-benar berfungsi dengan benar dapat menjadi pekerjaan ekstra untuk sedikit keuntungan. Dalam kasus khusus ini, tidak banyak pekerjaan tambahan, tetapi jika Anda memanipulasi string, ada seluruh rangkaian makro manipulasi string yang menyelesaikan fungsi yang benar.
sumber