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 "
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX