Это зависит от того, является ли TCHAR эфиром char
или wchar_t
, в зависимости от того, создаете ли вы приложение как Unicode или нет. Если вы создаете свое приложение как Unicode, вы можете просто сделать:
wcscat_s(dest, extra);
Если вы не строите свое приложение как Unicode, вам нужно либо преобразовать строку TCHAR: s (которая затем является строкой char
: s) в строку wchar_t
: s или вашу строку wchar_t
: s в строку char
: s. Для этого вам следует изучить функции MultiByteToWideChar или WideCharToMultiByte . И то и другое может показаться немного пугающим, принимая много параметров, поэтому я обычно использую некоторые помощники (обратите внимание, что для ясности удалена правильная обработка ошибок, правильное решение также вызовет функции, упомянутые выше, в цикле, который изменяет размер буфер при сбое вызова с ERROR_INSUFFICIENT_BUFFER
):
std::wstring multiByteToWideChar(const std::string &s)
{
std::vector<wchar_t> buf(s.length() * 2);
MultiByteToWideChar(CP_ACP,
MB_PRECOMPOSED,
s.c_str(),
s.length(),
&buf[0],
buf.size());
return std::wstring(&buf[0]);
}
std::string wideCharToMultiByte(const std::wstring &s)
{
std::vector<char> buf(s.length() * 2);
BOOL usedDefault = FALSE;
WideCharToMultiByte(CP_ACP,
WC_COMPOSITECHECK | WC_DEFAULTCHAR,
s.c_str(),
s.length(),
&buf[0],
buf.size(),
"?",
&usedDefault);
return std::string(&buf[0]);
}
В дополнение к этим я установил класс черт типа, чтобы я мог скомпилировать свои проекты как Unicode или без него:
template <class CharT>
struct string_converter_t;
template <>
struct string_converter_t<char>
{
static std::wstring toUnicode(const std::string &s)
{
return multiByteToWideChar(s);
}
static std::string toAscii(const std::string &s)
{
return s;
}
static std::string fromUnicode(const std::wstring &s)
{
return wideCharToMultiByte(s);
}
static std::string fromAscii(const std::string &s)
{
return s;
}
};
И почти идентичный экземпляр для wchar_t
(который я оставляю как исключение). В вашем случае вы можете просто сделать:
std::wstring result = dialog_name + string_converter_t<TCHAR>::toUnicode(config_name);