2010-06-25 4 views
1

Est-il possible d'ajouter une fonction à Lua via C++ qui renvoie une chaîne? -edit- Ok, ce code ne fonctionnera pas. De l'aide?Lua fonction renvoie la chaîne avec C++

int flua_getinput(lua_State *L){ 
    if(lua_isstring(L,1)){ 
     cout << lua_tostring(L,1); 
     cin >> input; 
     cout << "\n"; 
     lua_pushstring(L,input); 
    }else{ 
     cin >> input; 
     cout << "\n"; 
     lua_pushstring(L,input); 
    } 
    return 1; 
} 
Registering Function: 

lua_register(L,"getinput",flua_getinput); 
+0

Oui, c'est possible. Si vous voulez plus d'une réponse, vous devrez fournir un peu plus de contexte: qu'avez-vous essayé, et pourquoi ne semble-t-il pas fonctionner? –

+0

Je ne peux pas juste obtenir un exemple de la façon de le faire? J'essaie juste d'apprendre C++ et Lua. Je ne sais pas par quoi commencer. – Someguynamedpie

+0

Erreur Lua: lua: [string "init.lua"]: 1: tentative d'appel global 'getinput' (une valeur nulle) – Someguynamedpie

Répondre

1

This page montre comment vous pouvez obtenir un char * à partir de celui-ci.

+0

Merci, mais j'ai mis à jour mon message avec un nouveau problème. – Someguynamedpie

0

Le moyen le plus simple est d'utiliser luabind. Il détecte et traite automatiquement std :: string de sorte que vous pouvez simplement prendre une fonction comme, std :: string f() et le lier à lua, et il sera automatiquement converti en une chaîne lua native quand le script lua l'appelle .

0

Si vous obtenez l'erreur attempt to call global 'getinput' (a nil value), le problème est que l'appel de lua_register n'est pas en cours. La fonction getinput doit être chargée en appelant la fonction d'enregistrement ou en utilisant require si elle se trouve dans une bibliothèque.

2

Essayez-vous de faire quelque chose comme ça?

int lua_input(lua_State* L) { 
    string input; 
    cin >> input; 
    lua_pushstring(L, input.c_str()); 
    return 1; 
} 

int main() { 
    lua_State* L=lua_open(); 
    luaL_openlibs(L); 
    lua_register(L,"input",lua_input); 
    luaL_loadstring(L, "for i=1,4 do print('you typed '..input()); end"); 
    lua_pcall(L, 0, 0, 0); 
} 
+1

+1 l'OP a besoin d'un code complet je pense. Pour l'OP: Si vous prenez ceci, vous ** devez ** toujours vérifier chaque appel à loadstring ou pcall. Et utilisez lua_close à la fin. – u0b34a0f6ae

+0

@kaizer - vous avez raison. J'essayais juste de le garder aussi simple que possible. –