把lua嵌入到c++中当读配置文件,呵呵,想到来os都混了一年多了,还没分享过代码,不是我小气,是一直都忙着整公司代码,商业代码不敢随便分享咯,最近下班空闲的时候迷上了duilib这个界面库,所以产生了个邪恶的想法 ,本来duilib都支持xml定义界面,所以想到了xml来定义界面,c++实现必要的解析功能,然后把lua脚本嵌入进来写逻辑处理。东西还没整完,最近一直都很忙,但是手贱先贴点代码上来 调用lua函数 01 | const char * ReadResources( char *name) |
03 | lua_State * L = luaL_newstate() ; |
06 | ret = luaL_loadfile(L, "winlt.lua" ) ; |
07 | ret = lua_pcall(L,0,0,0) ; |
08 | lua_getglobal(L, "getResource" ); |
09 | lua_pushlstring(L,name, strlen (name)); |
12 | const char * c=( const char *)lua_tostring(L,-1); |
winlt.lua文件代码
2 | [ "ResourcePath" ]= "\\skin" , |
3 | [ "ResourceZip" ]= "default.zip" , |
7 | function getResource(name) |
main函数代码 01 | int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE , LPSTR , int nCmdShow) |
03 | CPaintManagerUI::SetInstance(hInstance); |
05 | CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + ReadResources( "ResourcePath" )); |
06 | CPaintManagerUI::SetResourceZip(ReadResources( "ResourceZip" )); |
08 | HRESULT Hr = ::CoInitialize(NULL); |
09 | if ( FAILED(Hr) ) return 0; |
11 | CFrameWindowWnd* pFrame = new CFrameWindowWnd(); |
12 | if ( pFrame == NULL ) return 0; |
14 | pFrame->Create(NULL, ReadResources( "title" ), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); |
15 | pFrame->CenterWindow(); |
16 | ::ShowWindow(*pFrame,SW_SHOW); |
17 | CPaintManagerUI::MessageLoop(); |
呵呵,这样以来,程序可以不经过编辑都能实现多皮肤多语音,多变逻辑处理了,至于lua处理逻辑部分,我还在完善中,呵呵
|