来自 C++ 的 Lua 函数
lua function from c++
让我们在"luafunc.lua"中有一个代码:
function foo(a, b)
return a + b
end
a = io.read('*n')
b = io.read('*n')
print (foo(a, b))
让我们尝试使用C++文件中的函数 foo:
#include <iostream>
using namespace std;
extern "C"{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
};
int main()
{
lua_State *lvm = lua_open();
luaL_openlibs(lvm);
luaL_loadfile(lvm, "luafunc.lua");
int a, b;
cin >> a >> b;
lua_pcall(lvm, 0, LUA_MULTRET, 0);
lua_getglobal(lvm, "foo");
lua_pushnumber(lvm, a);
lua_pushnumber(lvm, b);
if (lua_pcall(lvm, 2, 1, 0))
{
cout << "Error: " << lua_tostring(lvm, -1) << endl;
return 0;
}
cout << "The result is: " << lua_tonumber(lvm, -1) << endl;
lua_close(lvm);
return 0;
}
所以,问题是这个C++代码执行整个luafunc.lua。当然,我可以从lua文件中删除读取部分,然后从C++中仅执行foo。但是即使 lua-file 中有其他东西,我也可以使用 C++ 中的函数 foo 吗?
如果您需要能够在不运行该代码的情况下使用该函数,请将代码和函数分成两个单独的脚本,一个包含foo
的脚本和一个加载该脚本并测试foo
的脚本。
在执行包含函数的脚本之前,不会定义函数。执行该脚本将定义foo
,然后运行其他 3 行。
当你用loaL_loadfile加载文件(或任何其他加载调用)时,整个脚本会变成一个函数;要执行它,你必须调用该函数,使用lua_pcall或其他任何东西。 在此之前,定义 foo 的脚本只是堆栈上一个未命名、未执行的代码块。
没有函数可以只执行脚本的一部分,或者只执行函数定义。
即使 lua-file 中有其他内容,我也可以使用 C++ 中的函数 foo 吗?
是的。
您可以在不执行该文件的其他部分的情况下使用它吗?不。
Lua 函数在运行时定义。仅仅加载和编译该脚本是不够的,您必须运行生成的块才能在Lua状态下定义foo
。
相关文章:
- 使用 LuaBridge 或 Lua 将对象传递给 Lua 函数C++
- 将 Lua 函数块转换为 C 字符串
- 调用 lua 函数的地址为 C/C++?
- 如何使用重新定义的打印函数打印Lua表?
- 如何在C++中获取lua函数作为参数,然后调用它
- C++-在没有自定义.lib文件的情况下从Lua C模块调用Lua函数
- 将带有字段的表作为参数从C++传递给 Lua 函数?
- Lua 中看起来像表的函数是什么?
- 如何在C++中从Lua函数获取返回表?
- 从Qt/C++-App并行运行两个Lua函数
- Lua C API 自定义打印函数,在字符串中传递空格时不调用
- C++ 和 Lua 函数之间的交互与 3D 矢量参数
- 如何获取从C++发送到Lua函数的表的更新值?
- 包装C++函数以使用 SWIG 获取 Lua 字符串表
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 在C 函数中打印一个来自LUA的静态变量
- 从 LUA 脚本调用类函数C++
- 如何在LUA C API中分配全局LUA函数变量
- 如何安全地从 Lua 调用C++函数
- 尝试执行绕道附加,但无法将我的lua函数的数据类型转换为LPVOID