Конкатенация wchar_t* unicode в C++ для создания XLL excel?
<pre>// Concatenate two wchar_t* void mergeWChar(wchar_t*& dest, const wchar_t* source) { if (dest == nullptr) { dest = const_cast<wchar_t*>(source); return; } wchar_t *newdest = (wchar_t*)malloc((wcslen(dest) + wcslen(source) + 1) * sizeof *newdest); //thay + 1 bằng + 0 wcscpy(newdest, dest); // the *_s functions are useless here wcscat(newdest, source); // as you know that newdest point to // a long enough buffer dest = newdest; }
А затем я создаю функцию и регистрирую ее с помощью UB
<pre lang="c++"> <pre>__declspec(dllexport) LPXLOPER12 sorachu(double so) { static XLOPER12 xResult; xResult.xltype = xltypeStr; wchar_t* msg = nullptr; wchar_t* wcs = L"Sơn"; wchar_t* wcs1 = L"Văn"; mergeWChar(msg, wcs); mergeWChar(msg, wcs1); xResult.val.str = msg; return (LPXLOPER12)&xResult; }
Откройте Excel
Тип "=sorachu(123)"
Результат: ơnVăn...........................
Что я уже пробовал:
If I change <pre>wchar_t* wcs = L"Sơn";является
wchar_t* wcs = L"\006Sơn";тогда результаты = Sơn Văn" >>> TRUE
Как изменить L "\ 006" автоматически при изменении переменных wcs или wcs1.
Помогите мне, пожалуйста.