tags:

views:

429

answers:

2

I am embedding Lua into a C/C++ application. Is there any way to call a Lua function from C/C++ without executing the entire script first?

I've tried doing this:

//call lua script from C/C++ program
luaL_loadfile(L,"hello.lua");

//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);

But it gives me this:

PANIC: unprotected error in call to Lua API (attempt to call a nil value)

I can only call bar() when I do this:

//call lua script from C/C++ program
luaL_dofile(L,"hello.lua");  //this executes the script once, which I don't like

//call lua function from C/C++ program
lua_getglobal(L,"bar");
lua_call(L,0,0);

But it gives me this:

hello
stackoverflow!!

I am wanting this:

stackoverflow!

This is my lua script:

print("hello");

function bar()
 print("stackoverflow!");
end
+4  A: 

As was just discussed in #lua on freenode luaL_loadfile simply compiles the file into a callable chunk, at that point none of the code inside the file has run (which includes the function definitions), as such in order to get the definition of bar to execute the chunk must be called (which is what luaL_dofile does).

Etan Reisner
I was the person who asked that on the chat :P
Person
I figured you were, but figured I'd make the reference explicit anyway, just in case.
Etan Reisner
A: 

Found out that the script must be run to call the function.

Person