Appeler des fonctions Lua depuis C
Chargez et exécutez des scripts et des fonctions Lua depuis du code C.
Appeler des fonctions Lua depuis C est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Présentation
Pour appeler une fonction Lua depuis C : empilez la fonction, empilez les arguments, appelez lua_pcall, puis lisez les résultats sur la pile.
Charger un script Lua
luaL_dofile(L, filename) charge et exécute un fichier Lua. Vous pouvez aussi utiliser luaL_loadfile + lua_pcall pour séparer le chargement de l’appel.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Obtenir une fonction globale
Utilisez lua_getglobal(L, "funcName") pour empiler une fonction globale Lua.
// C code
lua_getglobal(L, "myFunction"); // push function
lua_pushnumber(L, 10); // push arg1
lua_pushnumber(L, 20); // push arg2lua_pcall
lua_pcall(L, nargs, nresults, errfunc) appelle la fonction présente sur la pile. En cas de réussite, elle renvoie LUA_OK et laisse les résultats sur la pile.
// 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);
}Plusieurs valeurs de retour
Indiquez nresults dans lua_pcall pour lire plusieurs valeurs de retour. Elles sont empilées dans l’ordre.
// 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
Transmettez LUA_MULTRET comme valeur de nresults pour accepter toutes les valeurs de retour de la fonction. Vérifiez ensuite lua_gettop(L) pour connaître leur nombre.
Gestionnaire d’erreurs
Transmettez un errfunc non nul à lua_pcall pour utiliser un gestionnaire d’erreurs personnalisé. Le gestionnaire reçoit l’objet d’erreur et peut ajouter des informations de trace.
// 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);Appeler des méthodes sur des objets
Pour appeler la méthode d’un objet Lua : empilez la méthode, empilez l’objet (self), empilez les autres arguments, puis appelez la méthode.
Transmettre des tables comme arguments
Créez une table sur la pile avec lua_newtable, remplissez ses champs avec lua_setfield, puis incluez-la comme argument de la fonction.
Registre des références
Utilisez luaL_ref(L, LUA_REGISTRYINDEX) pour stocker une valeur Lua dans le registre et obtenir une clé entière permettant de la retrouver ultérieurement.
// 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);Nettoyage
Supprimez toujours les valeurs inutilisées de la pile. Les piles déséquilibrées s’accumulent au fil des appels et finissent par déborder. Vérifiez la taille de la pile dans les compilations de débogage.
Question sur lua_pcall
Que fait lua_pcall(L, 2, 1, 0) ?
Récapitulatif : appeler Lua depuis C
Empilez la fonction et les arguments, appelez lua_pcall, vérifiez le code de retour, puis lisez les résultats sur la pile. Utilisez luaL_ref pour stocker des rappels Lua en vue d’une utilisation ultérieure. Supprimez toujours les valeurs inutilisées de la pile.
Questions Fréquemment Posées
La leçon « Appeler des fonctions Lua depuis C » est-elle gratuite ?
Oui — le texte complet de « Appeler des fonctions Lua depuis C » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Appeler des fonctions Lua depuis C » ?
Chargez et exécutez des scripts et des fonctions Lua depuis du code C. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Appeler des fonctions Lua depuis C » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèle de pile de l’API C de Lua
- Appeler des fonctions Lua depuis C
- Enregistrer des fonctions C dans Lua
- Gérer l’état et les erreurs