C ++如何将wchar_t *转换为TCHAR [](不是TCHAR *)

时间:2016-10-28 11:37:17

标签: c++ 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 * parametr。

解决方案:

  1. 将TCHAR更改为wchar_t

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

2 个答案:

答案 0 :(得分:1)

通常情况下,根本没有理由使用TCHAR。如果您正在使用wchar_t,只需通过添加W后缀直接调用Winapi函数的Unicode variants

// 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);

答案 1 :(得分:0)

坚持你拥有的东西,并在最后转换为适当的字符串类型。使用C ++字符串类型让窗口很好地正确播放可能会使你的头发变灰。

使用以下typedef创建可在整个代码中使用的字符串类型,而不是std :: string或std :: wstring:

typedef std::basic_string<TCHAR> tstring;

直接从缓冲区构造字符串:

tstring RealFileName(szTempFileName);