C++;从Lua脚本调用函数 我试图在我的应用程序中绑定Lua,现在我尝试测试如何将Lua绑定到C++中。我的问题很奇怪,因为我想在luaL\u loadfile之后从脚本开始调用函数main()。我的代码: #include <iostream> #include <cstdlib> #include <stdio.h> #include "lua.hpp" #include "lauxlib.h" #include "lualib.h" using namespace std; int main(int argc, char **argv) { lua_State* lua = luaL_newstate(); luaL_openlibs(lua); if (luaL_loadfile(lua, "test.lua") != 0) { std::cout << lua_tostring(lua, -1) << "\n"; lua_pop(lua, 1); return 1; } lua_getfield(lua, LUA_REGISTRYINDEX, "main"); if (lua_pcall(lua, 0, 1, 0) != 0) { printf("Error running function 'main': %s\n", lua_tostring(lua, -1)); return 1; } lua_close(lua); return 0; } #包括 #包括 #包括 #包括“lua.hpp” #包括“lauxlib.h” #包括“lualib.h” 使用名称空间std; int main(int argc,字符**argv){ lua_State*lua=luaL_newstate(); luaL_openlibs(lua); if(luaL_加载文件(lua,“test.lua”)!=0){ std::cout

C++;从Lua脚本调用函数 我试图在我的应用程序中绑定Lua,现在我尝试测试如何将Lua绑定到C++中。我的问题很奇怪,因为我想在luaL\u loadfile之后从脚本开始调用函数main()。我的代码: #include <iostream> #include <cstdlib> #include <stdio.h> #include "lua.hpp" #include "lauxlib.h" #include "lualib.h" using namespace std; int main(int argc, char **argv) { lua_State* lua = luaL_newstate(); luaL_openlibs(lua); if (luaL_loadfile(lua, "test.lua") != 0) { std::cout << lua_tostring(lua, -1) << "\n"; lua_pop(lua, 1); return 1; } lua_getfield(lua, LUA_REGISTRYINDEX, "main"); if (lua_pcall(lua, 0, 1, 0) != 0) { printf("Error running function 'main': %s\n", lua_tostring(lua, -1)); return 1; } lua_close(lua); return 0; } #包括 #包括 #包括 #包括“lua.hpp” #包括“lauxlib.h” #包括“lualib.h” 使用名称空间std; int main(int argc,字符**argv){ lua_State*lua=luaL_newstate(); luaL_openlibs(lua); if(luaL_加载文件(lua,“test.lua”)!=0){ std::cout,c++,function,lua,lua-5.2,C++,Function,Lua,Lua 5.2,在本文中,我用source 从lua脚本调用main()对您来说真的没有意义,因为main()是应用程序的入口点,并且您需要执行lua初始化操作,而且只需执行一次 示例和本文所介绍的,使用Lua 5.2和C++ C++,并能够调用Lua脚本中创建的C函数。该示例还显示了从C++程序调用Lua函数。 我大约在一年前使用Visual Studio 2005完成了这项工作。我怀疑从Visual Studio 2005到2012会很简单。我不确定移植到另一个编译器和开发环境会有多简单。至少_tmain(

在本文中,我用source

从lua脚本调用main()对您来说真的没有意义,因为main()是应用程序的入口点,并且您需要执行lua初始化操作,而且只需执行一次

示例和本文所介绍的,使用Lua 5.2和C++ C++,并能够调用Lua脚本中创建的C函数。该示例还显示了从C++程序调用Lua函数。


我大约在一年前使用Visual Studio 2005完成了这项工作。我怀疑从Visual Studio 2005到2012会很简单。我不确定移植到另一个编译器和开发环境会有多简单。至少_tmain()Visual Studio 2005中与Windows控制台应用程序一起使用的函数需要重命名为main()

从lua脚本调用main()对您来说真的没有意义,因为main()是应用程序的入口点,并且您需要执行lua初始化操作,而且只需执行一次

示例和本文所介绍的,使用Lua 5.2和C++ C++,并能够调用Lua脚本中创建的C函数。该示例还显示了从C++程序调用Lua函数。


我大约在一年前使用Visual Studio 2005完成了这项工作。我怀疑从Visual Studio 2005到2012会很简单。我不确定移植到另一个编译器和开发环境会有多简单。至少_tmain()Visual Studio 2005中与Windows控制台应用程序一起使用的函数需要重命名为main()。

请尝试
luaL\u-dofile
而不是
luaL\u-loadfile


这是最常见的错误之一:
luaL_loadfile
加载文件但不运行它;它只是在堆栈上留下一个表示加载文件的函数,随时可以调用。函数
main
仅在运行脚本时,即在调用脚本函数时定义。错误消息正在尝试告诉你吧。(我假设你的脚本定义了一个名为
main
的函数。没有任何实际需要,但它是无害的。)

尝试
luaL\u-dofile
而不是
luaL\u-loadfile


这是最常见的错误之一:
luaL_loadfile
加载文件但不运行它;它只是在堆栈上留下一个表示加载文件的函数,随时可以调用。函数
main
仅在运行脚本时,即在调用脚本函数时定义。错误消息正在尝试告诉你吧。(我假设你的脚本定义了一个名为
main
的函数。没有任何实际需要,但它是无害的。)

您试图执行的操作完全没有意义。
main
被C/C++运行库调用作为程序的入口点。为什么您要从lua脚本再次调用它?为什么您只会假设在键“main”下会有一些内容?您了解lua运行库是什么(不是)?您试图执行的操作完全没有意义。
main
被C/C++运行时库调用作为程序的入口点。为什么要从lua脚本再次调用它?为什么只假设在键“main”下会有某些内容?您了解lua运行时是什么(不是什么)吗?有一种方法可以从脚本加载任何定义的函数,而无需
luaL_dofile
?我的经验是,我有一个Lua块存储在一个或多个文件中。我将各种Lua块加载到Lua引擎中,然后可以在其中使用它们,例如使用Lua_pcall()或类似的功能,从C/C++应用程序中。我不确定您试图实现的是什么,因此最好提供更多详细信息。通常,人们将Lua引擎与应用程序一起使用,并提供各种功能,Lua脚本可以调用这些功能来编写脚本或在应用程序中自动实现功能。“有一种方法可以在不使用luaL_dofile的情况下从脚本加载任何定义的函数”
function()…end
是一条语句,必须执行代码才能生成函数值。有一种方法可以从脚本中加载任何定义的函数,而无需
luaL_dofile
?我的经验是,我拥有存储在一个或多个文件中的Lua块。我将各种Lua块加载到Lua引擎中,然后在那里可以使用它们,例如,使用lua_pcall()或类似的功能。我不确定您试图实现什么,因此最好提供更多详细信息。通常,人们将Lua引擎与应用程序一起使用,并提供各种功能,Lua脚本可以调用这些功能来编写脚本或自动化应用程序中的功能。”有一种方法可以在不使用luaL_dofile的情况下从脚本加载任何定义的函数“
function()…end
是一条语句,必须执行代码才能生成函数值。