我正在使用 SWIG 包装 C++ 对象以便在 lua 中使用,并且我试图将数据传递到我的 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
单位始终为零。我已经检查过,在 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
。
关于c++ - SWIG_NewPointerObj 和值始终为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406410/