C++ Как я могу конвертировать wchar_t* в TCHAR [] (не TCHAR*)
Я хочу добавить небольшие дополнительные параметры в большой блок, поэтому я не хочу обрабатывать большое количество кода.
TCHAR szTempFileName[MAX_PATH];
TCHAR lpTempPathBuffer[MAX_PATH];
int uRetVal = 0;
GetTempPath(MAX_PATH, // length of the buffer
lpTempPathBuffer); // buffer for path
GetTempFileName(lpTempPathBuffer, // directory for tmp files
TEXT("QRCode_"), // temp file name prefix
0, // create unique name
szTempFileName); // buffer for name
Я хочу изменить szTempFileName на необязательный параметр wstring/std::string/wchar_t*.
Решение:
изменить TCHAR на wchar_t
wcscpy (wchar_t [], wchat_t *);
2 ответа
Как правило, нет причин использовать TCHAR
S на всех. Если вы работаете с wchar_t
в любом случае, просто вызовите варианты Unicode функций Winapi напрямую, добавив W
суффикс:
// Use wchar_t instead of TCHAR.
wchar_t szTempFileName[MAX_PATH];
wchar_t lpTempPathBuffer[MAX_PATH];
int uRetVal = 0;
// Call GetTempPathW directly.
GetTempPathW(MAX_PATH, lpTempPathBuffer);
// Use L"..." instead of TEXT("...").
GetTempFileNameW(lpTempPathBuffer, L"QRCode_", 0, szTempFileName);
Придерживайтесь того, что у вас есть, и конвертируйте в соответствующий тип строки в конце. При правильном и правильном воспроизведении окон со строковыми типами C++ ваши волосы, возможно, станут седыми.
Используйте следующую typedef для создания вашего строкового типа, который вы можете использовать в коде вместо std:: string или std:: wstring:
typedef std::basic_string<TCHAR> tstring;
Создайте свою строку из буфера напрямую:
tstring RealFileName(szTempFileName);