WINWCHAR* WinWStrDupFromWC(const wchar_t *s) { #ifdef MAKENSIS WCToUTF16LEHlpr cnv; if (!cnv.Create(s)) throw runtime_error("Unicode conversion failed"); return (WINWCHAR*) cnv.Detach(); #else // NOTE: Anything outside the ASCII range will not convert correctly! size_t cch = wcslen(s); WINWCHAR* p = (WINWCHAR*) malloc(++cch * 2); if (p) for (size_t i = 0; i < cch; ++i) p[i] = (unsigned char) s[i]; return p; #endif }
static WINWCHAR* ResStringToUnicode(const TCHAR *s) { if (IS_INTRESOURCE(s)) return MAKEINTRESOURCEWINW((ULONG_PTR)s); WCToUTF16LEHlpr cnv; if (!cnv.Create(s)) throw std::runtime_error("Unicode conversion failed"); return (WINWCHAR*) cnv.Detach(); }