特に変わった処理はしていないと思うのですが、なぜかグルー関数が
呼び出されなくなりました。
本の通りにやっていたのですが、どこかまずい箇所でもあるのでしょうか?
グルー関数先にブレークポイントを設定しているのですが、
そのブレークポイントにヒットせず、処理が流れてしまいます。
ソースコードを載せたいと思います。
どこが間違っているのでしょうか?
[Lua側]
-- 作った命令
-- L_LoadGraph( char *string );
-- L_DrawGraph( int x, int y, int handle, int transflag );
-- L_ChangeWindowMode( int windowmode );
-- L_DxLib_Init();
-- L_SetTransColor( int r, int g, int b );
-- L_DrawString( int x,int y, char *message, int r, int g, int b );
-- L_GetHitKeyState( int keycode );
-- L_DrawBox( int x1, int y1, int x2, int y2, int r, int g, int b, int FillFlag );
-- L_LoadSoundMem( char *filename );
-- L_PlaySoundMem( int handle, int PlayType, int position );
--
--
DX_PLAYTYPE_NORMAL = 0
DX_PLAYTYPE_BACK = 0x0001
DX_PLAYTYPE_LOOP = 0x0002
DX_TOPPOSITIONFLAG = 1
function init()
x1 = 100;
y1 = 100;
x2 = 200;
y2 = 200;
r = 128;
g = 255;
b = 255;
L_ChangeWindowMode( 1 );
L_DxLib_Init();
L_SetTransColor( 0, 255, 0 );
player = {}
player.x = 440;
player.y = 240;
player.add_x = 3;
player.add_y = 3;
player.image = L_LoadGraph( "image\\ハエ.bmp" );
player.sound1 = L_LoadSoundMem( "sound\\win.wav" );
player.angle = 0;
player.cur = 0;
player.input = {}
for i = 1, 256 do
player.input[i] = 0;
end
func5100 = {}
func5100.cur = 0
info = {}
info.mode = 5000 -- 1.タイトル 2.つづきから 4.戦術画面
-- 5.円を描く運動
-- 5000.戦術画面 5100.機体改造 5200.武器改造
-- 5300.ステータスを見る 5400.ステージ選択
-- 5500.修理部隊のレベルアップ
-- 5600.セーブ 5700.ロード
-- 5800.出撃 6000.ゲームの終了
end
...
...
...
[C/C++側]
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine,int nCmdShow)
{
L = lua_open();
luaL_openlibs(L);
// if( lua_checkstack(L, 300) == 0 ) {
// OutputDebugString("スタックの容量が確保できませんでした\n");
// return 1;
// }
// 関数を登録
lua_register( L, "L_DrawLine", L_DrawLineGlue );
lua_register( L, "L_DxLib_Init", L_DxLib_InitGlue );
lua_register( L, "L_DxLib_End", L_DxLib_EndGlue );
lua_register( L, "L_ChangeWindowMode", L_ChangeWindowModeGlue );
lua_register( L, "L_LoadGraph", L_LoadGraphGlue );
lua_register( L, "L_DrawGraph", L_DrawGraphGlue );
lua_register( L, "L_SetTransColor", L_SetTransColorGlue );
lua_register( L, "L_DrawString", L_DrawStringGlue );
lua_register( L, "L_GetHitKeyState", L_GetHitKeyStateGlue );
lua_register( L, "L_DrawBox", L_DrawBoxGlue );
lua_register( L, "L_DrawString", L_DrawStringGlue );
lua_register( L, "L_LoadSoundMem", L_LoadSoundMemGlue );
lua_register( L, "L_PlaySoundMem", L_PlaySoundMemGlue );
luaL_dofile( L, "start.lua" );
// staut.lua の init に記述
// ウィンドウモードで起動
// ChangeWindowMode( TRUE );
// DxLib_Init();
// SetTransColor( 0, 255, 0 );
int result;
// lua start.lua から init関数呼び出し
lua_getglobal( L, "init" );
result = lua_pcall( L, 0, 0, 0 );
if( 0 != result )
show_pcall_error( result );
// 2重起動許可
SetDoubleStartValidFlag( TRUE );
...
...
...
void L_ChangeWindowMode( int mode )
{
ChangeWindowMode( mode );
}
//==================================================================
int L_ChangeWindowModeGlue( lua_State *L )
{
// 引数を取得
int mode = (int)lua_tonumber( L, 1 );
// 目的の関数を実行
L_ChangeWindowMode( mode );
// 戻り値を格納
lua_pushnumber( L, 0 );
// 戻り値の数(0)
return 0;
}
void L_DxLib_Init()
{
DxLib_Init();
}
//==================================================================
int L_DxLib_InitGlue( lua_State *L )
{
// 引数を取得
int width = (int)lua_tonumber( L, 1 );
int height = (int)lua_tonumber( L, 2 );
// 目的の関数を実行
L_DxLib_Init();
// 戻り値を格納
lua_pushnumber( L, 0 );
// 戻り値の数(0)
return 0;
}
Luaのソースコードの 29~31行目でグルー関数を呼び出しているのですが
C/C++側には、制御がなぜか来ません。
環境:
Lua 5.1
Visual C++ 2010 Express
Windows7