マルチバイト文字(Shift-JIS, UTF-8)とUnicode文字(VC++だとUTF-16なのかな?)の相互変換を行う関数群です。
C++用なので、std::stringまたはstd::wstringを用いています。
#include <windows.h>
#include <string>
// MultiByteToWideChar()のC++用ラッパ関数
std::wstring mbcs_to_wcs(const std::string &source, DWORD code_page)
{
	int required_size = MultiByteToWideChar(code_page, 0, source.c_str(), -1, 0, 0);
	std::wstring result(required_size - 1, '\0');
	MultiByteToWideChar(code_page, 0, source.c_str(), -1, &result[0], required_size);
	return result;
}
// WideCharToMultiByte()のC++用ラッパ関数
std::string wcs_to_mbcs(const std::wstring &source, DWORD code_page)
{
	int required_size = WideCharToMultiByte(code_page, 0, source.c_str(), -1, 0, 0, 0, 0);
	std::string result(required_size - 1, '\0');
	WideCharToMultiByte(code_page, 0, source.c_str(), -1, &result[0], required_size, 0, 0);
	return result;
}
std::wstring sjis_to_utf16(const std::string &source)
{
	return mbcs_to_wcs(source, CP_ACP);
}
std::string utf16_to_sjis(const std::wstring &source)
{
	return wcs_to_mbcs(source, CP_ACP);
}
std::wstring utf8_to_utf16(const std::string &source)
{
	return mbcs_to_wcs(source, CP_UTF8);
}
std::string utf16_to_utf8(const std::wstring &source)
{
	return wcs_to_mbcs(source, CP_UTF8);
}
std::string sjis_to_utf8(const std::string &source)
{
	return utf16_to_utf8(sjis_to_utf16(source));
}
std::string utf8_to_sjis(const std::string &source)
{
	return utf16_to_sjis(utf8_to_utf16(source));
}
#include <iostream>
int main()
{
	// wcoutで日本語が表示されるようにロケールを設定
	std::wcout.imbue(std::locale("japanese"));
	std::string s = "あいうえおabcde";
	std::wstring ws = L"あいうえおabcde";
	std::string x = sjis_to_utf8(s);
	std::string y = utf16_to_utf8(ws);
	// UTF-8の文字列を表示しようとすると文字化けする
	// ただし、ファイルなどに書き込んで適切なエディタで開けば、読めるはず
	std::cout << s << std::endl;
	std::wcout << ws << std::endl;
	std::cout << x << std::endl;
	std::cout << y << std::endl;
	std::cout << utf16_to_sjis(ws) << std::endl;
	std::wcout << sjis_to_utf16(s) << std::endl;
	std::cout << utf8_to_sjis(x) << std::endl;
	std::cout << utf8_to_sjis(y) << std::endl;
	std::wcout << utf8_to_utf16(x) << std::endl;
	std::wcout << utf8_to_utf16(y) << std::endl;
	return 0;
}