C++の文字列リテラルにつく u8 プレフィックスの再現

define芸。

define芸。

#module
	#define global u8(%1) ToUTF8(%1)
	#uselib "kernel32.dll"
	#func MultiByteToWideChar "MultiByteToWideChar" int, int, int, int, int, int
	#func WideCharToMultiByte "WideCharToMultiByte" int, int, int, int, int, int, int, int
	#defcfunc ToUTF8 str a_src
		sdim src
		dim nSize
		src = a_src
		
		// Shift_JIS -> UTF-16 -> UTF-8
		nSize = MultiByteToWideChar(0, 0, varptr(src), -1, 0, 0)
		sdim buf_u16, nSize * 2
		MultiByteToWideChar 0, 0, varptr(src), -1, varptr(buf_u16), nSize
		nSize = WideCharToMultiByte(0xFDE9, 0, varptr(buf_u16), -1, 0, 0, 0, 0)
		sdim buf_u8, nSize
		WideCharToMultiByte 0xFDE9, 0, varptr(buf_u16), -1, varptr(buf_u8), nSize, 0, 0
		
		sdim buf_u16, 0
		sdim src, 0
		return buf_u8
#global
#runtime "hsp3utf"

mes   "Shift_JIS の文字列です。"
mes u8"UTF-8 でエンコードされた文字列です。"