我在过去的6个小时里一直在努力解决这个问题!我哪儿也去不了。
我希望能够在c++文件中创建lua表,然后将其传递给lua脚本文件,该文件具有以下lua函数:
function MTable (t)
local n=#t
for i=1,n do
print(t[i])
end
end
我动态地创建了一个包含两个字符串的一维数组:
lua_newtable(L);
lua_pushstring(L,"10.10.1.1");
lua_pushstring(L,"10.10.1.2");
lua_rawseti(L,-3,2
假设我有两个来自标准Lua的Lua文件,它们共享一个公共库:
common.lua
function printHello(name)
print("Hello from " .. name)
end
file1.lua
require "common"
local scriptName = "file1"
function doSomething()
printHello(scriptName)
end
file2.lua
require "common"
local scriptName = "fil
为了用C语言定义Lua可调用的方法,它必须匹配给定的签名,并使用Lua API来检索参数和返回结果。我正在编写Lua的C#包装器,我感兴趣的是能够调用任意的C#方法,而不需要它们遵循这些约定。当包装像D这样的东西时,可以使用模板系统为任何给定的方法动态创建粘合代码。我在想,这在C#中也是可能的,但通过使用动态代码生成。
C API看起来像这样,生成的代码将通过我的库的较低级别的部分来操作它,该部分P/调用Lua C库。
static int foo (lua_State *L)
{
int n = lua_gettop(L); /* number of arguments */
我已经在我的框架中创建了一个围绕LuaBridge的包装器,这样我就可以轻松地将LuaBridge替换为另一个库。我有一些类可以在LuaBridge中注册,作为框架初始化的一部分。然后,我可以在Lua中轻松地访问或实例化这些类。当我想调用已在框架init中注册的类/表上的自定义方法时,就会出现这个问题,我已经在Lua中定义了这个方法。
function MyObject:OnUpdate()
self:Init()
end
如果我试图通过传递一个OnUpdate实例来调用MyObject,以便能够利用self,则会得到以下错误:
“尝试索引用户数据值(本地'self')”
对于这件简单的事情,我已经尝试了很多其他的方法,但都没能成功。我希望用户在第一步中从Lua定义一个表:
a={["something"]=10} -- key=something, value=10
然后,在第二步中,用户将从Lua调用一个用C++设计的函数:
b=afunction(a) -- afunction will be designed in C++
C++代码:
int lua_afunction(lua_State* L)
{
int nargs = lua_gettop(L);
if(nargs>1) throw "ERROR: O
尽管进行了艰苦的搜索,但我仍然找不到一个有效的Lua示例来调用返回表的Lua函数。我是Lua和Lua的新手,所以不要假设太多。但是,我可以阅读并理解从C加载Lua模块、通过堆栈传递值并从C调用Lua代码的原理,但是我没有找到任何如何处理表返回值的示例。
我想要做的是调用一个Lua函数,该函数在一个表中设置一些值(字符串、in ),我希望在调用该函数的C代码中返回这些值。
所以Lua函数应该是这样的:
function f()
t = {}
t["foo"] = "hello"
t["bar"] = 123
return t
end
有以下代码,用于从C++创建Lua表:
// set first element "1" to value 45
lua_pushnumber( state, 1 );
lua_pushnumber( state, 45 );
lua_rawset( state, -3 );
// set the number of elements (index to the last array element)
lua_pushliteral( state, "n" );
lua_pushnumber( state, 1 );
尝试使用表作为从外部传递的用户生成数据的查找。 tab = { ['on'] = function(x) x=x+1 return x end,
['off'] = function(x) x=x+2 return x end,
['high']= function(x) x=x+3 return x end,
['low'] = function(x) x=x+4 return x end
}
do
local var=0
local userDat
我正在尝试迭代lua表,但是我一直收到以下错误:
invalid key to 'next'
我知道索引从-8开始,我知道那里有一个表,因为它得到了其中的第一个(也是唯一的)值。然而,即使我知道表中只有一个字符串,它还是试图再次循环。
if (lua_istable(L, index))
{
lua_pushnil(L);
// This is needed for it to even get the first value
index--;
while (lua_next(L, index) != 0)
{
con
在Lua C处理程序中,我在抛出错误之前在注册表中设置了一个标志。如果使用pcall从Lua调用处理程序,我希望确保设置(或清除)此标志。以下是更多详细信息:
我有一个使用lua_pcall从C中调用的基本Lua函数handle
function handle()
c_handle()
end
C中的句柄具有下面的基本结构,我们希望在抛出错误之前设置一个标志,以区分错误和其他错误。
int c_handle(lua_State *L)
{
if (condition) {
set a flag in registry
throw error with lua_error