質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

1838閲覧

DXライブラリを使ったゲームにluaの出力が出ない

deroro

総合スコア5

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2020/02/03 04:18

編集2020/02/03 05:58

前提・実現したいこと

Dxライブラリを使ったゲームにLuaを実装しようとしましたが、lua_tostringからの返しがないです

該当のソースコード

C++

1#include "DxLib.h" 2#include <stdio.h> 3#include <stdlib.h> 4#include "lua/lua.hpp" 5#pragma comment(lib,"LUA-Static_Release.lib") 6 7int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 8{ 9 ChangeWindowMode(TRUE); 10 if (DxLib_Init() == -1) 11 { 12 return -1; 13 } 14 15 lua_State* L = luaL_newstate(); 16 luaL_openlibs(L); 17 18 19 if (luaL_dostring(L, "print('hello world!!')")==true) 20 { 21 printfDx("error has occurred\n"); 22 } 23 if (lua_tostring(L, -1)==NULL) 24 { 25 printfDx("there are no string"); 26 } 27 28 WaitKey(); 29 30 DxLib_End(); 31 32 lua_close(L); 33 34 return 0; 35} 36

画面への出力

画面に表示された出力は以下のとおりです。

there are no string

試したこと

Unicode/Multi-byte Characterの関係かと思いlibファイルをMulti-byte Characterに設定を変えてリビルドしたり同じくlibファイルをMDからMTに設定を変えてリビルドしましたが結果は変わりませんでした

補足情報(FW/ツールのバージョンなど)

VC2015 を利用しています
Lua は5.3.5です

追記

こちらがDxライブラリを使っていないプロジェクトでのコードです。

C++

1#include <stdio.h> 2#include <stdlib.h> 3#include "lua.hpp" 4#pragma comment(lib,"LUA-StaticTest.lib") 5 6int main() 7{ 8 lua_State* L = luaL_newstate(); 9 luaL_openlibs(L); 10 11 if (luaL_dostring(L, "print('Hello World')")) 12 { 13 printf("%s\n", lua_tostring(L, -1)); 14 } 15 16 lua_close(L); 17 while (true); 18}

このコードではコンソール上にHello Worldの出力が出ました。
対してDXライブラリを使ったプロジェクトでは空白になります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Luaは大昔にちょろっと触っただけなので外しているかもですが,

print('hello world!!')

これに戻り値が無いからなのでは…?


ちょっとテストしてみました.
↓のコードを実行すると,結果として5が表示され,
luaL_dostringの第二引数を"print('hello world!!')"にするとthere are no stringが表示されますので,
やはり,printは戻り値が無いのではないかと.

C++

1lua_State* L = luaL_newstate(); 2luaL_openlibs(L); 3 4std::cout << "(Call luaL_dostring)" << std::endl; 5if (luaL_dostring(L, "return 5") == 0 ) //※戻り値をスタックに積んでみるテスト 6{ 7 std::cout << "(Call lua_tostring)" << std::endl; 8 auto ret = ( lua_tostring(L, -1) ); 9 if( ret ) 10 { std::cout << "(result is)" << ret << std::endl; } 11 else 12 { std::cout << "there are no string" << std::endl; } 13} 14else 15{ std::cout << "luaL_dostring err" << std::endl; } 16 17lua_close(L);

投稿2020/02/03 04:47

編集2020/02/03 06:50
fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deroro

2020/02/03 06:01

質問に追記したDXライブラリを使っていないプロジェクトでは出力があってるようですが、DXライブラリを用いたプロジェクトではNULLと出てしまいます..
asm

2020/02/03 06:26

DXライブラリを使っていない方は戻り値がない場合もHello Worldしか出ませんね
fana

2020/02/03 06:35

DXライブラリ使ってない側にも > if (lua_tostring(L, -1)==NULL){ (何かダメなことを知るための出力) } を書かないと,比較にならないのではないでしょうか.
fana

2020/02/03 06:36

「Hello World」が出力されるのは, > luaL_dostring(L, "print('Hello World')") の結果であって,この質問の内容は > lua_tostringからの返しがないです なので.
deroro

2020/02/03 08:45

luaは初めてでphpみたいにprintの出力結果がlua_tostringに文字列として出るのかなと思ってのですが違ったようです。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問