2010-06-25 164 views
1

是否可以通过C++向Lua中添加一个返回字符串的函数? -edit- 好的,这段代码不会工作。任何帮助?用C++ Lua函数返回字符串

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

是的,这是可能的。如果你想要更多的答案,你必须提供更多的上下文:你尝试过什么,为什么它看起来没有工作? – 2010-06-25 01:38:19

+0

我不能只是得到一个如何去做的例子吗?我只是想学习C++和Lua。我不知道该从哪开始。 – Someguynamedpie 2010-06-25 01:44:58

+0

Lua错误: lua:[字符串“init.lua”]:1:尝试调用全局'getinput'(一个零值) – Someguynamedpie 2010-06-25 02:06:32

回答

0

最简单的方法是使用luabind。它会自动检测和处理std :: string,这样你就可以简单地使用std :: string f()这样的函数,并将其绑定到lua,并在lua脚本调用它时自动转换为本地lua字符串。

0

如果您收到错误attempt to call global 'getinput' (a nil value)那么问题是lua_register调用没有被击中。 getinput函数必须通过调用注册函数来加载,或者如果它位于库中,则使用require

2

你想要做这样的事吗?

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 OP需要我认为完整的代码。到OP:如果你采取这个,你**必须**也总是检查每个调用loadstring或pcall。最后使用lua_close。 – u0b34a0f6ae 2010-06-26 00:01:36

+0

@kaizer - 你是对的。我只是尽量保持简单。 – 2010-06-26 19:13:20