1

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

同じ結果になります。

なぜこれが失敗するのですか?どうすれば修正できますか?

4

1 に答える 1

2

でコロンを使用すると、インスタンスを受け取るfunction AI:UnitCreated(unit)非表示のパラメータが作成されます。実際には次のように動作します。selfAI

function AI.UnitCreated(self, unit)

aiしたがって、Cからその関数を呼び出すときは、インスタンスとパラメーターの両方のパラメーターを渡す必要がありunitます。渡したパラメーターは1つだけなので、selfに設定され、unitに設定されましたnil

于 2010-03-09T20:21:15.107 に答える