Re: How to call functions inside a table from C?
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: How to call functions inside a table from C?
 
- From: Link Hughes <link@...>
 
- Date: 2007年1月25日 13:47:08 -0500
 
Been doing this a lot lately.
You just need to get the function onto the stack so that you can use a 
lua_pcall() on it and any appropriate arguments.
So first you need to get the table that the function is in. Personally, 
I also like to note the stack index of the table when I do something 
like this since it makes the code more readable and helps with clean-up.
 int MinhaTabela;
 lua_getglobal( L, "MinhaTabela" );
 MinhaTabela = lua_gettop( L );
Then you'll need to get the function into the stack as well.
 lua_getfield( L, MinhaTabela, "variosCirculos2" );
Then, finally, push any arguments and make the call.
 if ( lua_pcall( L, 0, 0, 0 ) != 0 ) { /* Error Handling */ }
And if you have the table's index, then cleaning up the stack is easy 
because you don't have to remember how many elements to pop.
 lua_settop( L, (MinhaTabela - 1) );
In your case, it looks like you'll need a new C function for calling Lua 
functions resident in tables, so you'd need something like:
 void ScriptInterface::CallTableFunction(int tableIdx, char *funcName)
 {
 lua_getfield( L, tableIdx, funcName );
 if ( lua_pcall( L, 0, 0, 0 ) != 0 ) { /* Error Handling */ }
 }
Hope that helps.
-Link
--
Link Hughes
Lead Programmer
1st Playable Productions
http://www.1stplayable.com
Edmar wrote:
**Sorry for my bad English. **
Good day.
I'm trying to call a function declared inside a lua table, from my 
code in "C". This is my lua code:
MinhaTabela=
{
textos =
{
 textoSair = "Aperter ESC para sair a qualquer momento",
 textoEnter = "Aperte enter para jogar"
},
variosCirculos2 =
function ()
 for X=1, 30 do Circulo(X * 10,X * 10,X * 5,X * 10,X * 5,0); end
 Atualizar();
end,
relogio =
function ()
 ty = ty + 2;
 tx = tx + 5;
end
}
So, how can I call the functions 'variosCirculos2" or "relogio" from 
C? This is the code that I use to call Lua functions:
void ScriptInterface::CallFunction(char *funcName)
{
lua_getglobal(L, funcName);
if(lua_pcall(L, 0, 0, 0) != 0)
{
cout << "Erro ao chamar função: "
<< lua_tostring(L, -1)
<< endl;
}
}
Thanx for the atention.