在C 函数中打印一个来自LUA的静态变量
Printing a static variable inside a C++ function called from lua
我正在调用我的LUA模块共享对象文件中定义的C 函数(print_no(。C 函数获取从LUA传递的参数,并使用它来初始化静态变量。
我期望,当此功能多次调用时,该变量将保留其首次调用的值。这是我目前对功能中静态变量的理解。
这是我的C 代码(test.cpp(
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
static int print_no(lua_State *L)
{
static double d = lua_tonumber(L, 1); /* get argument */
return 1; /* number of results */
}
static const struct luaL_Reg mylib [] =
{
{"print_no", print_no},
{NULL, NULL} /* sentinel */
};
extern "C"
{
int luaopen_mylib (lua_State *L)
{
luaL_register(L, "mylib", mylib);
return 1;
}
}
我使用以下命令进行.SO文件:
g++ -shared -o mylib.so test.cpp -fPIC
下面给出的是我的lua代码(module.lua(
temp = require "mylib"
print(temp.print_no(5))
print(temp.print_no(6))
以下是我运行此模块时的输出:
[vishal@localhost test]$ lua -v
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
[vishal@localhost test]$ lua module.lua
5
6
我期望这两个时代5都将被打印。我的理解怎么了?
您没有将结果推回LUA堆栈,因此Lua只是在堆栈上读取下一个值,这是您传递给print_no
的参数。
尝试:
static int print_no(lua_State *L)
{
static double d = lua_tonumber(L, 1); /* get argument */
lua_pushnumber(L, d);
return 1; /* number of results */
}
相关文章:
- 如何在C++中将用户数据从一个 Lua 块传递到另一个块
- 是否可以使用另一个lua文件中定义的表,该表在当前文件中不需要作为模块
- 在C 函数中打印一个来自LUA的静态变量
- 如何在LUA中创建一个C++兼容的函数对象
- 而不是在 lua 中创建一个对象,如何让 lua 直接高C++对象来启动方法?
- Lua:为自定义用户数据提供一个字符串方法
- 如何使用可变模板来制作一个通用的Lua函数包装器
- 在Selene中包装一个枚举,以便在Lua中访问
- 将一个没有全局的表从 lua 返回到 C
- C# 应用(通过本机 C++ DLL)与另一个使用嵌入 Lua 的 DLL 的应用之间的 IPC
- 当我为调试Lua编译程序时,运行得很好,但为什么我要为发布版编译它,我得到了一个c0000005错误
- SWIG:Lua-传递一个c++实例作为Lua函数参数
- 在 LuaBridge 中注册一个类的函数,然后通过 lua 脚本调用它?
- 从另一个线程中断c++中的lua脚本
- 使用SWIG封装c++类以在Lua中使用它-需要一个简单的例子
- 注册一个c++类以便在Lua 5.2中使用
- 将表从一个lua状态传递到另一个lua状态
- 编写一个Lua包装器,如何使用可以返回多种类型的方法从堆栈返回一个值
- 从Lua创建一个C++类或"entity"(或等效的东西)
- 使用指针从一个c++对象,到另一个c++对象,修改成员变量,从Lua