金慶的專欄
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評論 :: 0 Trackbacks
公告
我的隨筆
我的評論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網游開發(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊
公告照片
搜索
積分與排名
積分 - 656586
排名 - 25
最新評論
1.?re: boost::asio::spawn 將一統C++網絡庫
asio 成為C++首選網絡庫
--linda
2.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--金慶
3.?re: mingw編譯OrzNet
能發送一個mingw編譯好的OrzNet庫給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--bigbad
5.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯誤(11032)
2.?SVN中邪惡的replace(10955)
3.?VS2005編譯libevent(10413)
4.?混音算法的學習與研究(10203)
5.?C調用lua腳本的效率測試(9007)
評論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯誤(18)
4.?C++引用優于指針(17)
5.?ACE與ASIO之間關于Socket編程的比較(16)
用preload加載Lua導出模塊
用preload加載Lua導出模塊
(金慶的專欄 2017.5)
參考:
How to make exported module non-global?
https://github.com/SteveKChiu/lua-intf/issues/135
動態庫可以這樣導出模塊:
extern "C"
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__)
__declspec(dllexport)
#endif
int luaopen_modname(lua_State* L)
{
LuaRef mod = LuaRef::createTable(L);
LuaBinding(mod)
...;
mod.pushToStack();
return 1;
}
如果不是動態庫,可以這樣導出全局模塊 c_util:
int main()
{
...
LuaBinding(L).beginModule("c_util")
.addFunction("foo", []() { return 123; })
.endModule();
...
}
如果不想讓它成為全局模塊,則需要在 package.preload 表中注冊一個加載函數.
Lua程序設計 第3版 英文版 programming in lua 3ed
The preload searcher allows the definition of an arbitrary function to load a module.
It uses a table, called package.preload, to map module names to loader functions.
When searching for a module name, this searcher simply looks for the given name in the table.
If it finds a function there, it returns this function as the module loader.
Otherwise, it returns nil.
This searcher provides a generic method to handle some non-conventional situations.
For instance, a C library statically linked to Lua can register its luaopen_ function into the preload table,
so that it will be called only when (and if) the user requires that module.
In this way, the program does not waste time opening the module if it is not used.
代碼示例:
extern "C" int open_my_module(lua_State* L)
{
LuaRef mod = LuaRef::createTable(L);
LuaBinding(mod)
.addFunction("get_my_svr_id", &Util::GetMySvrId)
;
mod.pushToStack();
return 1;
}
int main()
{
...
LuaRef table(L, "package.preload");
table["c_util"] = LuaRef::createFunctionWith(L, open_my_module);
...
}
Lua 測試:
assert(c_util == nil)
local t = require("c_util")
assert("table" == type(t))
assert("function" == type(t.get_my_svr_id))
posted on 2017-05-10 16:11
金慶
閱讀(746)
評論(0)
編輯
收藏
引用
所屬分類:
1. C/C++
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
How are dtLinks created in NavMesh
C++ parameter passing rules
Naming Conventions for Accessors
Visual Studio 2019 Compiler Hangs
Fbx File Format Identifier
查找內存錯誤
std::thread 中的異常會丟失調用棧
用賦值代替 protobuf CopyFrom()
vs2017 linux 編譯輸出改成 vs 格式
為 LiteIDE 添加選中標記
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
蜜桃麻豆www久久国产精品
|
久久精品人人做人人爽电影
|
色88久久久久高潮综合影院
|
丰满少妇高潮惨叫久久久
|
久久久久久久波多野结衣高潮
|
久久精品国产精品亚洲
|
亚洲一区精品伊人久久伊人
|
久久亚洲精品无码VA大香大香
|
久久久久国产精品麻豆AR影院
|
怡红院日本一道日本久久
|
国产精品xxxx国产喷水亚洲国产精品无码久久一区
|
国产亚洲欧美成人久久片
|
久久综合伊人77777
|
国产亚洲精久久久久久无码
|
国内精品欧美久久精品
|
欧美午夜精品久久久久免费视
|
久久久中文字幕
|
av色综合久久天堂av色综合在
|
国产精品成人99久久久久
|
久久99精品国产麻豆宅宅
|
久久国产精品-久久精品
|
久久亚洲精品国产亚洲老地址
|
四虎久久影院
|
久久国产精品无码网站
|
久久91亚洲人成电影网站
|
亚洲精品无码成人片久久
|
欧美午夜A∨大片久久
|
亚洲国产精久久久久久久
|
久久99精品久久久久久久不卡
|
97久久综合精品久久久综合
|
久久精品卫校国产小美女
|
一级a性色生活片久久无
|
久久国产乱子伦精品免费午夜
|
久久香蕉一级毛片
|
亚洲国产成人久久综合一
|
老司机国内精品久久久久
|
国产精品久久精品
|
久久久久久久亚洲Av无码
|
天天躁日日躁狠狠久久
|
色欲av伊人久久大香线蕉影院
|
国产美女亚洲精品久久久综合
|