ttp://ash.jp/code/unitbl21.htm
を見ると"日本"は
●JIS第一水準漢字・文字コード表
区 点 JIS SJIS EUC UTF-8 UTF-16 字
38 92 467C 93FA C6FC E697A5 65E5 日
43 60 4B5C 967B CBDC E69CAC 672C 本
です。
実際に、私が使っているテキストエディタで夫々のコーディングで保存してダンプすると
utf8の場合
E6,97,A5,E6,9C,AC,20,0A
sjisの場合
93,FA,96,7B,20,0A
となります。"20,0A"は空白文字と改行です。utf8でもSJISでも所謂半角文字は同じになります。
余り言いたくないのですが、
>『DXライブラリとは全く無関係のライブラリ』と
>『DXライブラリとは全く無関係のライブラリの関数』
は
Lua(ttps://ja.wikipedia.org/wiki/Lua)
lua_tostring()
です。
元来、DXライブラリと組み合わせて使うものではないのは承知しています。便利だから使っているだけです。
なお私はLua信者ではありません。
言及しなかったのは、重複しますが、Luaとは直接関係ないからです。
実際のバインディングは次です。
int myLoadGraphScreen(lua_State *L) {
int x = lua_tointeger(L, 1);
int y = lua_tointeger(L, 2);
const char *GraphName = lua_tostring(L, 3); /* EANS1246 TODO */
printf("%02X,", GraphName[0]);
printf("%02X,", GraphName[1]);
printf("%02X,", GraphName[2]);
printf("%02X,", GraphName[3]);
printf("%02X,", GraphName[4]);
printf("%02X,", GraphName[5]);
printf("%02X,", GraphName[6]);
Sleep(10 * 1000);
abort();
int TransFlag = lua_tointeger(L, 4);
int ret = LoadGraphScreen(x, y, GraphName, TransFlag);
lua_pushinteger(L, ret);
return 1;
}
もちろん登録用処理もあるが割愛。
printfからabortまでは、今回だけのデバッグ用です。それは
<Luaソース>(utf8で書かれる)
LoadGraphScreen( 0 , 0 , "日本" , 0 ) ;
が評価されると、次を出力します。
FFFFFFE6,FFFFFF97,FFFFFFA5,FFFFFFE6,FFFFFF9C,FFFFFFAC,00,
"FFFFFFE6"はE6です。先頭ビットが立っていてlua_tostring()がconst char *だから%02Xだとこうなります。
つまり、Luaは無関係です。
LoadGraphScreen(x, y, GraphName, TransFlag);
の第三引数のアドレスGraphNameが指す先に
E6,97,A5,E6,9C,AC,00
がある場合にファイル名"日本"をLoadGraphScreen()が読み込めない、ということです。
もちろん実際には".bmp"等の画像を示す拡張子を付けます。
話は簡単で、バイト列E6,97,A5,E6,9C,ACをLoadGraphScreen()が期待するコーディングに変換すればいいんです。
それが私には出来ない、ということです。
単に文字コードに関する知識が足りないだけで、LuaとかDXライブラリとは直接の関連はありません。
DrawString()も同じです。
int myDrawString(lua_State *L) {
int x = lua_tointeger(L, 1);
int y = lua_tointeger(L, 2);
const char *String = lua_tostring(L, 3); /* EANS1246 TODO */
int Color = lua_tointeger(L, 4); /* unsigned int */
int ret = DrawString(x, y, String, Color);
lua_pushinteger(L, ret);
return 1;
}
こちらは成功します。
最初は失敗していたが、ネット情報を参考にして成功させました。
その手順は忘れました。