0Pricing
Lua Academy · Aula

Chamando funções Lua a partir de C

Carregue e execute scripts e funções Lua a partir de código C.

Chamando funções Lua a partir de C é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Visão geral

Para chamar uma função Lua a partir de C: coloque a função na pilha, coloque os argumentos, chame lua_pcall e depois leia os resultados da pilha.

Carregando um script Lua

luaL_dofile(L, filename) carrega e executa um arquivo Lua. Ou use luaL_loadfile + lua_pcall para separar o carregamento da chamada.

// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
  fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
  lua_pop(L, 1);
}

Obtendo uma função global

Use lua_getglobal(L, "funcName") para colocar uma função global Lua na pilha.

// C code
lua_getglobal(L, "myFunction"); // push function
lua_pushnumber(L, 10);          // push arg1
lua_pushnumber(L, 20);          // push arg2

lua_pcall

lua_pcall(L, nargs, nresults, errfunc) chama a função na pilha. Em caso de sucesso, retorna LUA_OK e deixa os resultados na pilha.

// C code
if (lua_pcall(L, 2, 1, 0) != LUA_OK) {
  fprintf(stderr, "Call error: %s\n", lua_tostring(L, -1));
  lua_pop(L, 1);
} else {
  double result = lua_tonumber(L, -1);
  lua_pop(L, 1);
  printf("Result: %f\n", result);
}

Vários valores retornados

Especifique nresults em lua_pcall para ler vários valores retornados. Eles são colocados na pilha na ordem.

// C: calling a Lua fn that returns two values
lua_getglobal(L, "minmax");
lua_pushnumber(L, 5); lua_pushnumber(L, 3);
lua_pcall(L, 2, 2, 0);
double mn = lua_tonumber(L, -2);
double mx = lua_tonumber(L, -1);
lua_pop(L, 2);

LUA_MULTRET

Passe LUA_MULTRET como nresults para aceitar todos os valores retornados pela função. Verifique lua_gettop(L) depois para saber quantos foram retornados.

Manipulador de erros

Passe um errfunc diferente de zero para lua_pcall a fim de usar um manipulador de erros personalizado. O manipulador recebe o objeto de erro e pode adicionar informações de rastreamento da pilha.

// C: setup traceback handler
lua_getglobal(L, "debug");
lua_getfield(L, -1, "traceback");
lua_remove(L, -2);  // remove debug table
int errhandler = lua_gettop(L);
// push fn and args, then:
lua_pcall(L, nargs, nresults, errhandler);

Chamando métodos em objetos

Para chamar um método de objeto Lua: coloque o método na pilha, coloque o objeto (self), coloque os demais argumentos e depois faça a chamada.

Passando tabelas como argumentos

Crie uma tabela na pilha com lua_newtable, preencha os campos com lua_setfield e depois inclua-a como argumento da função.

Registro de referências

Use luaL_ref(L, LUA_REGISTRYINDEX) para armazenar um valor Lua no registro e obter uma chave inteira para recuperá-lo depois.

// C: store a callback for later use
lua_pushvalue(L, callbackIdx);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
// Later: lua_rawgeti(L, LUA_REGISTRYINDEX, ref);

Limpeza

Sempre remova os valores não utilizados da pilha. Pilhas desequilibradas se acumulam ao longo de muitas chamadas e acabam transbordando. Verifique o tamanho da pilha em compilações de depuração.

Pergunta sobre lua_pcall

O que lua_pcall(L, 2, 1, 0) faz?

Recapitulação: chamando Lua a partir de C

Coloque a função e os argumentos na pilha, chame lua_pcall, verifique o código retornado e depois leia os resultados da pilha. Use luaL_ref para armazenar callbacks Lua para uso posterior. Sempre remova os valores não utilizados da pilha.

Perguntas Frequentes

A aula “Chamando funções Lua a partir de C” é grátis?

Sim — o texto completo de “Chamando funções Lua a partir de C” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Chamando funções Lua a partir de C”?

Carregue e execute scripts e funções Lua a partir de código C. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Chamando funções Lua a partir de C”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Modelo de pilha da API C do Lua
  2. Chamando funções Lua a partir de C
  3. Registrando funções C no Lua
  4. Gerenciamento de estado e tratamento de erros
← Voltar para Lua Academy