2013-01-19 38 views
0

我想讓lua 5.1執行一個只是調用我的一個C++函數的行"Assail"我不明白爲什麼它不起作用,任何人都可以指出錯誤嗎?lua沒有在做字符串

這是攻擊功能:

static int Assail(lua_State *L) 
{ 
    cout << "test" << endl; 
    return 1; 
} 

我想打電話給do_string這樣的:

L = lua_open(); 
luaL_openlibs(L); 
lua_register(L, "Assail", Assail); 
luaL_dostring(L, "s = Assail()"); 
lua_close(L); 

任何幫助表示讚賞。

+0

出了什麼問題?無論如何,請檢查'luaL_dostring'的返回碼。最後,請注意'Assail'應該可能返回0,因爲它不會將任何東西壓入堆棧。令人驚訝的是,嘗試's = Assail(10,20);打印(S)'。 – lhf

回答

3

由於您是在C++中編寫此代碼,因此將名稱修飾應用於該函數,因此在最終的可執行文件/庫中會有一個與Lua預期不同的特殊名稱。您可以通過使用extern關鍵字將其鏈接更改爲C來解決此問題:

extern "C" int Assail(lua_State *L); 

extern "C" int Assail(lua_State *L) 
{ 
    // code here 
} 
+0

謝謝,這正在工作 – Dean

+2

@Dean不客氣。當你能夠這樣做時,請接受這個答案。 – 2013-01-19 16:50:48