我有一个由C++构造的大对象(我已经公开给Lua),我想在Lua中进行处理。
我可以使用int、lua_pushstring而不是C++类将任何简单类型传递给Lua函数( lua_pushinteger、string)。我已经尝试了lua_pushlightuserdata,通过推一个指向我的对象的指针,但是没有运气。
function process(object) --object is the c++ passed function
--return processed data
end
我怎么能这么做?这可能吗?
请注意,我希望将一个在C++中构造的特定实例传递给Lua。我可以公开构造
我想做这样的事情:
Create object in Lua将此对象传递给C++,在此对象上执行一些从C++传递该对象的方法
现在我在卢阿有了这个
Account = {balance = 0}
function Account.Create(name)
local a = Account:new(nil, name);
return a;
end
function Account:new (o, name)
o = o or {name=name}
setmetatable(o, self)
self.__index = self
return o
en
我想向来自C++的Lua userdata对象添加一些静态字段。有问题的对象是向量,它们是在C++中创建的,它们的工作方式是这样的,但我在我的用户数据上尝试了lua_setfield,但我得到了一个attempt to index a Vector value错误,我真的不想使用.x(), .y(), .z(),因为必须调用一个函数,推送到堆栈,然后在lua端读取。
有没有办法在userdata上注册字段以供Lua访问?
我想在c++中调用lua函数debug.traceback()来获取c++中的trackback信息,所以我在c++中添加了如下函数:
int luaErrorHandler(lua_State *m_state) {
if (!lua_isstring(m_state, 1))
return 1;
lua_getfield(m_state, LUA_GLOBALSINDEX, "debug");
if (!lua_istable(m_state, -1)) {
lua_pop(m_state, 1);
r
我对Lua完全陌生。据我所知,可以将Lua变量和方法绑定到C/C++方面的变量和方法。
但是,是否有可能将用户类型变量绑定到C/C++函数的调用,该函数看起来可能与Lua侧的属性类似?
示例:
// C++
struct player {
int get_value(const std::string& property) const {
auto it = values.find(name);
if (it != values.end()) {
return it->second;
}
return -1;
}
st
我想知道在C++代码中与lua /O交互的最佳方式。 lua脚本: while true do
local input = io.read("*line")
if input == "hello" then
print("world")
else
print("hmmm...")
end
end C++代码: lua_State* L = luaL_newstate();
luaL_openlibs(L);
int r = luaL_dofile(L, "f
我正在尝试将Lua类对象推送到堆栈上。指向该对象的指针可以由多个函数返回。
换句话说:我需要推送用户数据值,同时保持对它们使用'==','~=‘等的能力,所以如果用户数据指针是相同的C++对象,那么它必须是相同的。
-- this should push the object onto the stack
local firstObject = GetClassObject();
firstObject:doSomething();
firstObject将由lua脚本存储,稍后在代码中我将需要再次执行此操作:
-- the c++ class pointer has
We have a problem in our project,we use lua 5.1 as our scripting language.
但是当在一个函数中使用lua_pushnumber将太多的数据从C++传递给lua时,lua堆栈看起来像是堆栈溢出,导致C++中的其他内存部分已经被写入,当回调返回到C++时,它会导致系统崩溃。我想知道是否有一些参数来控制lua堆栈的大小。我尝试更改在lua.h中定义的参数LUA_MINSTACK,但它似乎不起作用。我还尝试使用lua_checkstack()来避免将太多数字推送到lua堆栈,但它也不起作用
getNineScreenEntity
下面的代码将把一个C++类绑定到Lua。
void registerPerson(lua_State *lua, Person *person)
{
//We assume that the person is a valid pointer
Person **pptr = (Person**)lua_newuserdata(lua, sizeof(Person*));
*pptr = person; //Store the pointer in userdata. You must take care to ensure
//
我在c++中创建了一个对象,我想将它传递给Lua,在Lua中,我需要获取该对象并传递给c++。
在c++中:
class Measure
{
public:
Measure();
private:
int value;
}
Void PassObjToLua(lua_State *L)
{
Measure * m=new Measure(); // I need to pass this object to Lua
// How to implement?
}
Void GetObjFromLua(lua_State *L)
{
//I need to
我正在C++中实现lua (5.1),遇到了问题,无法将lua函数作为从lua调用的c++函数的参数传递。示例(从C++调用Main函数):
卢阿:
function Main()
HookEntityFunction("player", 1, PlayerSpawn); -- << is this normal?
end
function PlayerSpawn()
end
C++:
int HookEntityFunction(lua_State *L)
{
lua_CFunction F = lua_tocfunction(L, 3); -
在从C++调用Lua函数时,我遇到了奇怪的问题。我在卢阿:
Player =
{
Number = 0.43,
Text = "SomeText",
}
function Player:Func(a, b)
return (a * b);
end
在lua_pcall之前,我的堆栈看起来:
表格
函数
3.
4.
我称这一职能为:
lua_pcall(L, 2, 1, 0)
我从Lua那里得到了错误:
试图对局部'b‘(一个零值)执行算术
当我更改Lua脚本时
return (a * b);
至
return a;
没有错误,但来自lu
我想传递给一个期望纯虚拟类的C++对象的函数,一个从纯虚拟C++类派生的类的Lua对象。我该怎么做呢?
我是新来lua和luabind的,请耐心听我说。
在C++中:
struct A {
virtual void foo() = 0;
};
void do_something(A* a) {
a->foo();
}
在Lua中:
class 'MyA' (A)
....
function MyA:foo()
print('hi')
end
再次在C++中:
... // somehow create an instance of MyA c