SWIGを使用してluaで使用するC++オブジェクトをラップし、luaスクリプトのメソッドにデータを渡そうとしていますが、常に「nil」として出力されます。
void CTestAI::UnitCreated(IUnit* unit){
lua_getglobal(L, "ai");
lua_getfield(L, -1, "UnitCreated");
swig_module_info *module = SWIG_GetModule( L );
swig_type_info *type = SWIG_TypeQueryModule( module, module, "IUnit *" );
SWIG_NewPointerObj(L,unit,type,0);
lua_epcall(L, 1, 0);
}
これがluaコードです:
function AI:UnitCreated(unit)
if(unit == nil) then
game:SendToConsole("I CAN HAS nil ?")
else
game:SendToConsole("I CAN HAS UNITS!!!?")
end
end
単位は常にnilです。チェックしましたが、C ++コードでは、ユニットポインタが無効/nullになることはありません
私も試しました:
void CTestAI::UnitCreated(IUnit* unit){
lua_getglobal(L, "ai");
lua_getfield(L, -1, "UnitCreated");
SWIG_NewPointerObj(L,unit,SWIGTYPE_p_IUnit,0);
lua_epcall(L, 1, 0);
}
同じ結果になります。
なぜこれが失敗するのですか?どうすれば修正できますか?