Saya mencari metode, atau potongan kode untuk mengubah std :: string ke LPCWSTR
Saya mencari metode, atau potongan kode untuk mengubah std :: string ke LPCWSTR
Jawaban:
Terima kasih untuk tautan ke artikel MSDN. Inilah yang saya cari.
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
std::wstring stemp = s2ws(myString);
LPCWSTR result = stemp.c_str();
Solusinya sebenarnya jauh lebih mudah daripada saran lainnya:
std::wstring stemp = std::wstring(s.begin(), s.end());
LPCWSTR sw = stemp.c_str();
Yang terbaik dari semuanya, itu platform independen. h2h :)
reinterpret_cast
. Kode ini tidak berfungsi. Jangan gunakan. .
char
biasanya dikodekan sebagai ANSI. Dengan pengkodean ANSI, nilai 128 sampai 255 diinterpretasikan menggunakan halaman kode yang sedang aktif. Memasukkan nilai-nilai itu ke dalam wchar_t
(pengkodean UTF-16 pada Windows) tidak akan memberikan hasil yang diinginkan. Jika Anda ingin tepatnya, ini bekerja tepat di 50% kasus. Dengan mempertimbangkan pengkodean karakter DBCS, persentase itu semakin menurun.
Jika Anda berada di lingkungan ATL / MFC, Anda dapat menggunakan makro konversi ATL:
#include <atlbase.h>
#include <atlconv.h>
. . .
string myStr("My string");
CA2W unicodeStr(myStr);
Anda kemudian dapat menggunakan unicodeStr sebagai LPCWSTR. Memori untuk string unicode dibuat di tumpukan dan dilepaskan kemudian destruktor untuk unicodeStr dijalankan.
Alih-alih menggunakan std :: string, Anda bisa menggunakan std :: wstring.
EDIT: Maaf ini tidak lebih jelas, tapi saya harus lari.
Gunakan std :: wstring :: c_str ()
string myMessage="helloworld";
int len;
int slength = (int)myMessage.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, myMessage.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, myMessage.c_str(), slength, buf, len);
std::wstring r(buf);
std::wstring stemp = r.C_str();
LPCWSTR result = stemp.c_str();
LPCWSTR lpcwName = std :: wstring (strname.begin (), strname.end ()). C_str ()