日本語対応LuaのC++プロジェクトへの組み込み方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みーや

日本語対応LuaのC++プロジェクトへの組み込み方について

#1

投稿記事 by みーや » 9年前

ノベルゲームを制作しています。みーやと申します。
開発において、日本語を扱う必要があり、また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

どのようにしたら、このエラーは直るのでしょうか?ご教授お願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 日本語対応LuaのC++プロジェクトへの組み込み方について

#2

投稿記事 by みけCAT » 9年前

予想ですが、必要なライブラリをリンクするようにプロジェクトを設定するかソースコードにおまじないを書くと直るかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

みーや

Re: 日本語対応LuaのC++プロジェクトへの組み込み方について

#3

投稿記事 by みーや » 9年前

質問者です。返信ありがとうございます。

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;
}

ARCS

Re: 日本語対応LuaのC++プロジェクトへの組み込み方について

#4

投稿記事 by ARCS » 9年前

luaのライブラリがC言語でコンパイルされているものであれば、C++から使う為にはlua.hppで良いのですが、
そちらにおいてあるのはC++でコンパイルされているため、lua.hppでインクルードしてしまうとC言語扱いされてうまくいきません。
lua.hppではなくlua.h、lualib.h、lauxlib.hをインクルードしてください。

みーや

Re: 日本語対応LuaのC++プロジェクトへの組み込み方について

#5

投稿記事 by みーや » 9年前

質問者です。ARCSさんの仰られたとおりにインクルード文を書き換えてみたところ、
うまくいきました!

hppファイルはC++のヘッダファイルだと初めて知りました。
とても勉強になりました。

みけCATさん、ARCSさん、本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る