문제

LUA에서 사용하기 위해 C ++ 객체를 랩핑하기 위해 SWIG를 사용하고 있으며 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 ++ 코드에서 장치 포인터가 유효하지 않습니다.

나는 또한 시도했다 :

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

동일한 결과로.

이것이 실패한 이유는 무엇입니까? 어떻게 수정합니까?

도움이 되었습니까?

해결책

결장을 사용할 때 function AI:UnitCreated(unit), 그것은 숨겨진 것을 만듭니다 self 수신하는 매개 변수 AI 사례. 실제로 다음과 같이 행동합니다.

function AI.UnitCreated(self, unit)

따라서 C에서 해당 함수를 호출 할 때는 두 매개 변수를 모두 전달해야합니다. ai 인스턴스와 unit 매개 변수. 하나의 매개 변수 만 통과 했으므로 self 그것으로 설정되었습니다 unit 설정되었습니다 nil.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top