[英]Passing non-Global C++ objects to Lua functions (Swig)
我正在扩展与lua的接口,但遇到一个问题,我需要将指向对象的指针传递给lua代码以进行处理。 这些类将通过SWIG进行包装,我可以使用swig通过lua实例化它们,但这将给我留下无用的对象。
我需要能够将回调对象以及表示事件中对象的对象传递给lua。 我无法将回调手动定义为全局回调,因为这会引入无法接受的约束。
因此,对于一个通用示例,给定C类和lua中具有1个参数的函数,我如何在将该lua函数传递给C类型的C ++指针时调用它?
啊哈,回答了我自己的问题,但是我发现了!
http://lua-users.org/lists/lua-l/2007-05/msg00053.html
你好乔伊,
我几乎从lua方面完成所有SWIG-LUA工作。 Swig非常适合仅包装一个C / C ++库以使其被lua读取。 让C ++与lua对话非常容易,但是没有充分的文档记录。
您对
lua_pushlightuserdata(
)的想法很接近,但是还不存在。 您可能想要这样的东西:Foo* p= new Foo(); SWIG_NewPointerObj(L,p,SWIGTYPE_p_Foo,1); lua_setglobal (L, "p");
SWIG_NewPointerObj()为foo对象创建一个用户数据(不是lightuserdata)并将其压入堆栈。 最后一个参数(在本例中为1)是您是否要lua管理内存(0表示否,1表示是)。
在包装文件中都可以找到
SWIG_NewPointerObj()
和SWIGTYPE_p_Foo
。一旦有了,您应该可以在lua中进行操作:
print(p) print(swig_type(p)) p:some_function()
如果您还有其他问题,请告诉我。 问候,马克
我没有将Swig与C ++和Lua一起使用,但是您可以在没有Swig的情况下以两种不同的方式(用户数据和闭包)进行操作。 我不知道Swig是否以此干扰。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.