Newer
Older
PrismSoftware / ECTrainer2 / MyWinUtils.h
#pragma once

#include <Windows.h>
#include <tchar.h>
#include <string>
#include <vector>
#include <system_error>

static std::wstring Multi2Wide(std::string const& src)
{
	//std::size_t converted{};
	//std::vector<wchar_t> dest(src.size(), L'\0');
	//if (::_mbstowcs_s_l(&converted, dest.data(), dest.size(), src.data(), _TRUNCATE, ::_create_locale(LC_ALL, "jpn")) != 0) {
	//	throw std::system_error{ errno, std::system_category() };
	//}
	//dest.resize(std::char_traits<wchar_t>::length(dest.data()));
	//dest.shrink_to_fit();
	//return std::wstring(dest.begin(), dest.end());

	auto const dest_size = ::MultiByteToWideChar(CP_ACP, 0U, src.data(), -1, nullptr, 0U);
	std::vector<wchar_t> dest(dest_size, L'\0');
	if (::MultiByteToWideChar(CP_ACP, 0U, src.data(), -1, dest.data(), (int)dest.size()) == 0) {
		throw std::system_error{ static_cast<int>(::GetLastError()), std::system_category() };
	}
	dest.resize(std::char_traits<wchar_t>::length(dest.data()));
	dest.shrink_to_fit();
	return std::wstring(dest.begin(), dest.end());
}