AutoCompilation.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. // dui-demo.cpp : main source file
  2. //
  3. #include "stdafx.h"
  4. #include "MainDlg.h"
  5. #include "trayicon\SShellNotifyIcon.h"
  6. //从PE文件加载,注意从文件加载路径位置
  7. #define RES_TYPE 0
  8. //#define SYSRES_TYPE 0
  9. // #define RES_TYPE 0 //PE
  10. // #define RES_TYPE 1 //ZIP
  11. // #define RES_TYPE 2 //7z
  12. // #define RES_TYPE 2 //文件
  13. //去掉多项支持,以免代码显得混乱
  14. #if (RES_TYPE==1)
  15. #include "resprovider-zip\zipresprovider-param.h"
  16. #else
  17. #if (RES_TYPE==2)
  18. #include "resprovider-7zip\zip7resprovider-param.h"
  19. #endif
  20. #endif
  21. #ifdef _DEBUG
  22. #define SYS_NAMED_RESOURCE _T("soui-sys-resourced.dll")
  23. #else
  24. #define SYS_NAMED_RESOURCE _T("soui-sys-resource.dll")
  25. #endif
  26. #ifdef _DEBUG
  27. #pragma comment(lib,"lua-52d")
  28. #pragma comment(lib,"scriptmodule-luad")
  29. #else
  30. #pragma comment(lib,"lua-52")
  31. #pragma comment(lib,"scriptmodule-lua")
  32. #endif
  33. //定义唯一的一个R,UIRES对象,ROBJ_IN_CPP是resource.h中定义的宏。
  34. ROBJ_IN_CPP
  35. int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int /*nCmdShow*/)
  36. {
  37. HRESULT hRes = OleInitialize(NULL);
  38. SASSERT(SUCCEEDED(hRes));
  39. int nRet = 0;
  40. SComMgr *pComMgr = new SComMgr;
  41. TCHAR szCurrentDir[MAX_PATH] = { 0 };
  42. GetModuleFileName(NULL, szCurrentDir, sizeof(szCurrentDir));
  43. LPTSTR lpInsertPos = _tcsrchr(szCurrentDir, _T('\\'));
  44. #ifdef _DEBUG
  45. _tcscpy(lpInsertPos + 1, _T("..\\AutoCompilation"));
  46. #else
  47. _tcscpy(lpInsertPos + 1, _T("\0"));
  48. #endif
  49. SetCurrentDirectory(szCurrentDir);
  50. {
  51. BOOL bLoaded = FALSE;
  52. CAutoRefPtr<SOUI::IImgDecoderFactory> pImgDecoderFactory;
  53. CAutoRefPtr<SOUI::IRenderFactory> pRenderFactory;
  54. bLoaded = pComMgr->CreateRender_GDI((IObjRef**)&pRenderFactory);
  55. SASSERT_FMT(bLoaded, _T("load interface [render] failed!"));
  56. bLoaded = pComMgr->CreateImgDecoder((IObjRef**)&pImgDecoderFactory);
  57. SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("imgdecoder"));
  58. pRenderFactory->SetImgDecoderFactory(pImgDecoderFactory);
  59. SApplication *theApp = new SApplication(pRenderFactory, hInstance);
  60. #ifdef _DEBUG
  61. //选择了仅在Release版本打包资源则系统资源在DEBUG下始终使用DLL加载
  62. {
  63. HMODULE hModSysResource = LoadLibrary(SYS_NAMED_RESOURCE);
  64. if (hModSysResource)
  65. {
  66. CAutoRefPtr<IResProvider> sysResProvider;
  67. CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
  68. sysResProvider->Init((WPARAM)hModSysResource, 0);
  69. theApp->LoadSystemNamedResource(sysResProvider);
  70. FreeLibrary(hModSysResource);
  71. }
  72. else
  73. {
  74. SASSERT(0);
  75. }
  76. }
  77. #else
  78. //从DLL加载系统资源
  79. {
  80. HMODULE hModSysResource = LoadLibrary(SYS_NAMED_RESOURCE);
  81. if (hModSysResource)
  82. {
  83. CAutoRefPtr<IResProvider> sysResProvider;
  84. CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
  85. sysResProvider->Init((WPARAM)hModSysResource, 0);
  86. theApp->LoadSystemNamedResource(sysResProvider);
  87. FreeLibrary(hModSysResource);
  88. }
  89. else
  90. {
  91. SASSERT(0);
  92. }
  93. }
  94. #endif
  95. CAutoRefPtr<IResProvider> pResProvider;
  96. #ifdef _DEBUG
  97. //选择了仅在Release版本打包资源则在DEBUG下始终使用文件加载
  98. {
  99. CreateResProvider(RES_FILE, (IObjRef**)&pResProvider);
  100. bLoaded = pResProvider->Init((LPARAM)_T("uires"), 0);
  101. SASSERT(bLoaded);
  102. }
  103. #else
  104. {
  105. CreateResProvider(RES_PE, (IObjRef**)&pResProvider);
  106. bLoaded = pResProvider->Init((WPARAM)hInstance, 0);
  107. SASSERT(bLoaded);
  108. }
  109. #endif
  110. theApp->InitXmlNamedID(namedXmlID, ARRAYSIZE(namedXmlID), TRUE);
  111. theApp->AddResProvider(pResProvider);
  112. //加载LUA脚本模块。
  113. #if (defined(DLL_CORE) || defined(LIB_ALL)) && !defined(_WIN64)
  114. //加载LUA脚本模块,注意,脚本模块只有在SOUI内核是以DLL方式编译时才能使用。
  115. CAutoRefPtr<SOUI::IScriptFactory> pScriptLuaFactory;
  116. bLoaded = pComMgr->CreateScrpit_Lua((IObjRef**)&pScriptLuaFactory);
  117. SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("scirpt_lua"));
  118. theApp->SetScriptFactory(pScriptLuaFactory);
  119. #endif//DLL_CORE
  120. //加载多语言翻译模块。
  121. CAutoRefPtr<ITranslatorMgr> trans;
  122. bLoaded = pComMgr->CreateTranslator((IObjRef**)&trans);
  123. SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("translator"));
  124. if (trans)
  125. {//加载语言翻译包
  126. theApp->SetTranslator(trans);
  127. pugi::xml_document xmlLang;
  128. if (theApp->LoadXmlDocment(xmlLang, _T("lang_cn"), _T("translator")))
  129. {
  130. CAutoRefPtr<ITranslator> langCN;
  131. trans->CreateTranslator(&langCN);
  132. langCN->Load(&xmlLang.child(L"language"), 1);//1=LD_XML
  133. trans->InstallTranslator(langCN);
  134. }
  135. }
  136. theApp->RegisterWindowClass<SShellNotifyIcon>();
  137. // BLOCK: Run application
  138. {
  139. CMainDlg dlgMain;
  140. dlgMain.Create(GetActiveWindow());
  141. dlgMain.SendMessage(WM_INITDIALOG);
  142. dlgMain.CenterWindow(dlgMain.m_hWnd);
  143. dlgMain.ShowWindow(SW_SHOWNORMAL);
  144. nRet = theApp->Run(dlgMain.m_hWnd);
  145. }
  146. delete theApp;
  147. }
  148. delete pComMgr;
  149. OleUninitialize();
  150. return nRet;
  151. }