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*.

Решение:

  1. изменить TCHAR на wchar_t

  2. wcscpy (wchar_t [], wchat_t *);

2 ответа

Как правило, нет причин использовать TCHARS на всех. Если вы работаете с 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);
Другие вопросы по тегам