I'm trying to bind Lua in my applications, now I trying to test how bind Lua into C++. My problem is very strange because I want to call function main() from script at start, after luaL_loadfile. My code:
#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;
}
and my output is:
Error running function 'main': attempt to call a nil value
I put together an example of embedding lua 5.2 into a Visual Studio 2005 console project in this article with source, Extending a C++ Application with Lua 5.2.
It really does not make sense for you to call main() from your lua script since main() is the entry point for your application and there is Lua initialization stuff that you need to do and only to do once.
The example and the article I put together shows using Lua 5.2 with C++ and being able to call C functions you create from your Lua script. The example also shows calling Lua functions from the C++ program as well.
I did this about a year ago using Visual Studio 2005. I suspect going from Visual Studio 2005 to 2012 would be straightforward. I am not sure how straightforward it would be to port to another compiler and development environment. At a minimum the _tmain() function used with a Windows console application in Visual Studio 2005 would need to be renamed to main().