ノベルゲームを制作しています。みーやと申します。
開発において、日本語を扱う必要があり、またLuaを使っていましたので、
Luaで日本語が扱えないかと、ネットで探したところ、以下のようなものが見つかりました。
http://lua.tips/index.php?Lua%20winsjis ... C%E7%89%88
ダウンロードして、日本語処理を行うスクリプトを書いて(コマンドプロンプト上で)実行したところうまく出来たので、
次はこれを今作っているノベルゲーム(DxライブラリとVC++2013)に組み込もうと思いました。
しかし、インクルードディレクトリ、ライブラリディレクトリを解凍したフォルダの中のsrcフォルダに設定しても、
うまくいきませんでした。
具体的には、以下のようなエラーが10個ほど出力されます。
エラー 1 error LNK2019: 未解決の外部シンボル _lua_gettop が関数 _WinMain@16 で参照されました。 D:\novel_game\20160128_ng_all_lua_code\WinMain.obj 3dbasic
どのようにしたら、このエラーは直るのでしょうか?ご教授お願いします。
日本語対応LuaのC++プロジェクトへの組み込み方について
Re: 日本語対応LuaのC++プロジェクトへの組み込み方について
予想ですが、必要なライブラリをリンクするようにプロジェクトを設定するかソースコードにおまじないを書くと直るかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 日本語対応LuaのC++プロジェクトへの組み込み方について
質問者です。返信ありがとうございます。
include文は以下のようにソースコード先頭付近に書いております。
また、このファイルはインクルードディレクトリに指定したディレクトリ内に確かにあります。
エラーを見る限り、このヘッダファイルはちゃんとインクルードできていると思います。
もうひとつの可能性(必要なライブラリをリンクする)ですが、僕もそれが怪しいと思っています。
しかし、記載したURLからダウンロードしたフォルダ内にはlibファイルはsrcフォルダに入っているliblua.libだけでした。
もちろん、これを「リンカ→入力」の「追加の依存ファイル」に登録してあります。
include文は以下のようにソースコード先頭付近に書いております。
また、このファイルはインクルードディレクトリに指定したディレクトリ内に確かにあります。
エラーを見る限り、このヘッダファイルはちゃんとインクルードできていると思います。
もうひとつの可能性(必要なライブラリをリンクする)ですが、僕もそれが怪しいと思っています。
しかし、記載したURLからダウンロードしたフォルダ内にはlibファイルはsrcフォルダに入っているliblua.libだけでした。
もちろん、これを「リンカ→入力」の「追加の依存ファイル」に登録してあります。
#include <DxLib.h>
#include <lua.hpp> //★ここです。
int printfDxGlue(lua_State *L)
{
const char *str = lua_tostring(L, 1);
printfDx(str);
return 0;
}
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
int key;
int FileHandle, GHandle;
char String[256], FilePath[256];
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "printfDx", printfDxGlue);
ChangeWindowMode(TRUE);
SetGraphMode(1200, 800, 32);
if (DxLib_Init() == -1) return -1;
int top = lua_gettop(L);
int ret = luaL_dofile(L, "test.lua");
lua_settop(L, top);
WaitKey();
FileHandle = FileRead_open("main_data.txt");
FileRead_gets(String, 256, FileHandle);
FileRead_gets(FilePath, 256, FileHandle);
GHandle = LoadGraph(FilePath);
SetDrawScreen(DX_SCREEN_BACK);
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
ClearDrawScreen();
DrawBox(0, 0, 1200, 800, GetColor(255, 255, 255), true);
//背景
DrawGraph(0, 0, GHandle, FALSE);
//メッセージ欄
DrawBox(0, 600, 1200, 800, GetColor(0, 0, 0), true);
//文章
DrawString(0, 600, String, GetColor(255, 255, 255));
ScreenFlip();
}
DxLib_End();
return 0;
}
Re: 日本語対応LuaのC++プロジェクトへの組み込み方について
luaのライブラリがC言語でコンパイルされているものであれば、C++から使う為にはlua.hppで良いのですが、
そちらにおいてあるのはC++でコンパイルされているため、lua.hppでインクルードしてしまうとC言語扱いされてうまくいきません。
lua.hppではなくlua.h、lualib.h、lauxlib.hをインクルードしてください。
そちらにおいてあるのはC++でコンパイルされているため、lua.hppでインクルードしてしまうとC言語扱いされてうまくいきません。
lua.hppではなくlua.h、lualib.h、lauxlib.hをインクルードしてください。
Re: 日本語対応LuaのC++プロジェクトへの組み込み方について
質問者です。ARCSさんの仰られたとおりにインクルード文を書き換えてみたところ、
うまくいきました!
hppファイルはC++のヘッダファイルだと初めて知りました。
とても勉強になりました。
みけCATさん、ARCSさん、本当にありがとうございました。
うまくいきました!
hppファイルはC++のヘッダファイルだと初めて知りました。
とても勉強になりました。
みけCATさん、ARCSさん、本当にありがとうございました。