分享

把lua嵌入到c++中当读配置文件

 MikeDoc 2011-11-24
把lua嵌入到c++中当读配置文件,呵呵,想到来os都混了一年多了,还没分享过代码,不是我小气,是一直都忙着整公司代码,商业代码不敢随便分享咯,最近下班空闲的时候迷上了duilib这个界面库,所以产生了个邪恶的想法 ,本来duilib都支持xml定义界面,所以想到了xml来定义界面,c++实现必要的解析功能,然后把lua脚本嵌入进来写逻辑处理。东西还没整完,最近一直都很忙,但是手贱先贴点代码上来
调用lua函数
01const char * ReadResources(char *name)
02{
03    lua_State * L = luaL_newstate() ;        //创建lua运行环境
04 
05    int ret = 0 ;
06    ret = luaL_loadfile(L,"winlt.lua") ;      //加载lua脚本文件
07    ret = lua_pcall(L,0,0,0) ;
08    lua_getglobal(L,"getResource");             //函数名
09    lua_pushlstring(L,name,strlen(name));
10    //运行函数并把结果压入栈 
11    lua_call(L, 1, 1);
12    const char * c=(const char *)lua_tostring(L,-1);
13    lua_pop(L, 1);
14    lua_close(L) ;                     //释放lua运行环境
15    return c;
16}


winlt.lua文件代码
1entity={
2    ["ResourcePath"]="\\skin",
3    ["ResourceZip"]="default.zip",
4    ["title"]="彩票筛选器",
5    ["xml"]="skin_zh.xml"
6};
7function getResource(name)
8    return entity[name];
9end
main函数代码
01int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/,LPSTR /*lpCmdLine*/, int nCmdShow)
02{
03    CPaintManagerUI::SetInstance(hInstance);
04    //CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
05    CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + ReadResources("ResourcePath"));
06    CPaintManagerUI::SetResourceZip(ReadResources("ResourceZip"));
07 
08    HRESULT Hr = ::CoInitialize(NULL);
09    if( FAILED(Hr) ) return 0;
10 
11    CFrameWindowWnd* pFrame = new CFrameWindowWnd();
12    if( pFrame == NULL ) return 0;
13 
14    pFrame->Create(NULL, ReadResources("title"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
15    pFrame->CenterWindow();
16    ::ShowWindow(*pFrame,SW_SHOW);
17    CPaintManagerUI::MessageLoop();
18 
19    ::CoUninitialize();
20    return 0;
21}
呵呵,这样以来,程序可以不经过编辑都能实现多皮肤多语音,多变逻辑处理了,至于lua处理逻辑部分,我还在完善中,呵呵

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多