2016-04-21 170 views
3

我有一個C++程序創建一個lua_State並運行自定義的Lua腳本。如果我想要預先加載lua_State cjson而不是在Lua代碼中調用「require」,我可以知道它是否可行,我該怎麼做?在嵌入式Lua中使用cjson C++

回答

2

是的,這可能再次運行cjson文件。對此使用luaL_requiref。使用thisthis作爲參數。您需要將cjson代碼鏈接到您的可執行文件,編譯器可能會讚賞luaopen_*函數的函數聲明。如果你使用Lua 5.1(目前還沒有luaL_requiref),你可以使用或從Compat-5.3盜取。

+0

謝謝你的回答!但是你提到的兩個函數都是在.c文件中定義的,而不是在頭文件中定義的,那麼這是否意味着我必須修改它們的代碼或者在某個頭文件中公開該函數? – keelar

+1

您可以創建一個頭文件幷包含它,或者只需在自己的源代碼的開頭放置一個聲明'int luaopen_cjson(lua_State *);'。 – siffiejoe

1

如果您不想在腳本中調用require,您可以通過C++調用require並在返回值之外創建一個全局變量。

例如,在C++做:

if (luaL_dostring(L, "cjson = require(\"cjson\")")) // run code 
    std::cout << luaL_checkstring (L, -1) << std::endl; // print error 

之後,你可以使用你的腳本一樣cjson.new()cjson沒有任何要求或者這樣的電話,因爲它存在一個全局變量。

由於需要使用由C++然後調用需要在Lua以後不會不像使用dofile處理或類似