2012-09-02 44 views
1

luasql.sqlite3模塊已成功編譯到我的C程序中,靜態鏈接。但是,看起來該模塊尚未註冊。 「require'luasql.sqlite3'」的調用在Lua腳本中總是失敗。其他一些模塊調用luaL_register函數來註冊自己。但luaLn_register不在luaopen_luasql_sqlite3函數中調用。在這種情況下如何註冊luasql.sqlite3?我使用Lua-5.1.5。Lua:如何在C程序中嵌入luasql.sqlite3(靜態鏈接)?

The source code of luaopen_luasql_sqlite3 is at the bottom

回答

2

以下是將luaopen_函數放入package.preload表的方法。

lua_getfield(L, LUA_GLOBALSINDEX, "package"); 
lua_getfield(L, -1, "preload"); 
lua_pushcfunction(L, luaopen_socket_core); 
lua_setfield(L, -2, "socket.core"); 
1

require作品與DLL文件,因爲它使用指定的模塊名稱追查DLL和獲取從DLL特定的功能。它不能自動工作於靜態庫,因爲C和C++沒有反省;您不能動態地找到以luaopen_開頭的C函數。

因此,您需要告訴Lua包系統,您希望使該模塊可用於Lua代碼。您可以通過在package.preload表中添加luaopen_函數來完成此操作,併爲其指定模塊將被調用的名稱。

+0

謝謝。我直接在C中調用luaopen_函數。luaL_requiref函數在lua5.1中不可用。有沒有一種方便的方法將luaopen_函數放入package.preload表中? – douyw