SOUI官方论坛

 找回密码
 立即注册
查看: 937|回复: 5

SOUI项目发布小经验,含如何发布单独exe程序,打包dll到exe

[复制链接]
  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
    发表于 2019-9-18 14:53:48 | 显示全部楼层 |阅读模式
    SOUI项目生成exe或dll,在其它电脑上提示缺少dll时,要根据你项目对应的VC版本配上对应的dll,如msvcr100.dll类似这样的。
    这种有提示的比较好解决,若是没有提示的,若出现下图
    1.png
    编译好的exe(release),在其它电脑上运行不出界面(win7x64环境下,VS2010编译的x32,在win7 x64下运行不正常)
    对于第一次发布SOUI项目的来说,可能有点***不着头脑。其实是缺少了soui-sys-resource.dll
    把这个dll带上就可以了。
    【融合】梦懵o∩_∩o女孩儿纸-.-萌 14:21:21
    挨个删除 总会看到的

    【管理员】小白 14:23:11
    [img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\651864346\QQ\WinTemp\RichOle\O9%L@([JJ~)~5S)SQG@A[_M.png[/img]
    编译好的exe(release),在其它电脑上运行不出界面(win7x64环境下,VS2010编译的x32,在win7 x64下运行不正常)

    【管理员】小白 14:23:36
    放uires在同目录下,也是同样情况

    【008】浪里白条 14:24:04
    dll没带够吧

    【管理员】小白 14:24:57
    没提示缺dll,同样的程序在xp下会提示缺少,补上之后XP下运行出错,直接要调试

    【元婴】macken 14:26:22
    depends 需要用到他

    【管理员】小白 14:27:32
    谢了,我用这个工具查查看

    【SOUI作者】@请充值 14:28:11
    这应该是没有找到资源。

    【SOUI作者】@请充值 14:28:22
    如果是缺少dll是运行不起来。

    【008】浪里白条 14:28:29
    没找到应该有个黑点

    【008】浪里白条 14:28:42
    黑方块

    【管理员】小白 14:29:17
    缺资源的话我放在uires这个文件夹也不行

    【008】浪里白条 14:29:18
    那些动态加载的可能没带

    【008】浪里白条 14:29:40
    你把所有的dll全放过去试试

    【元婴】小火哥 14:31:33
    为啥不用静态库,就没这个烦恼了

    【管理员】小白 14:32:46
    缺了soui-sys-resource.dll,那这样的话,SOUI项目不存在单exe的情况了?

    【管理员】小白 14:33:22
    XP上加了soui-sys-resource.dll也正常了

    【SOUI作者】@请充值 14:33:40
    可以的。

    【SOUI作者】@请充值 14:33:51
    把系统资源编译到exe就好了。


  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
     楼主| 发表于 2019-9-18 14:58:55 | 显示全部楼层
    整合SOUI的默认资源(soui-sys-resource.dll)版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/***xuan***/article/details/62069738
    最近在工作中用到了SOUI库,其中需要实现这么一个需求—-整合soui-sys-resource.dll里面的资源到主工程中,最终生成一个单文件版的可执行程序。经过一番***索后,最终成功实现o(∩∩)o,特意在此留下足迹,希望能够帮助到入坑的小伙伴啦(*^_^*)

    第一步:将soui-sys-resource工程中的资源文件夹拷贝到主工程之中

    因为soui-sys-resource工程其实就是生成了一个纯资源DLL,因此,直接将工程中的theme_sys_res文件夹拷贝到自己的SOUI工程的uires文件之中即可,如图所示:
    2.png
    第二步:将theme_sys_res文件夹下的所有资源文件的相对路径添加到uires.idx文件之中,并设置其对应的资源类型及名称

    由于这个是默认资源,因此只需要参照SOUI开发团队提供的theme_sys_res.rc2文件改就可以啦(^__^)。

    3.png


    • 在uires.idx文件之中的<LAYOUT>节点下追加以下内容:
    • 二步:将theme_sys_res文件夹下的所有资源文件的相对路径添加到uires.idx文件之中,并设置其对应的资源类型及名称
    在uires.idx文件之中的<LAYOUT>节点下追加以下内容:
        <!--默认界面资源-->
        <file name="SYS_XML_EDITMENU" path="theme_sys_res\sys_xml_editmenu.xml" />
        <file name="SYS_XML_MSGBOX" path="theme_sys_res\sys_xml_msgbox.xml" />
    • 在此文件之中的<PNG>节点下添加以下内容:

    1.     <!--界面库默认资源-->
    2.     <file name="SYS_BORDER" path="theme_sys_res\sys_border.png" />
    3.     <file name="SYS_CHECKBOX" path="theme_sys_res\sys_checkbox.png" />
    4.     <file name="SYS_RADIO" path="theme_sys_res\sys_radio.png" />
    5.     <file name="SYS_FOCUS_CHECKBOX" path="theme_sys_res\sys_focus_checkbox.png" />
    6.     <file name="SYS_FOCUS_RADIO" path="theme_sys_res\sys_focus_radio.png" />
    7.     <file name="SYS_SCROLLBAR" path="theme_sys_res\sys_scrollbar.png" />
    8.     <file name="SYS_TREE_CHECKBOX" path="theme_sys_res\sys_tree_checkbox.png" />
    9.     <file name="SYS_TREE_TOGGLE" path="theme_sys_res\sys_tree_toggle.png" />
    10.     <file name="SYS_HEADER" path="theme_sys_res\sys_header.png" />
    11.     <file name="SYS_SPLIT_VERT" path="theme_sys_res\sys_split_vert.png" />
    12.     <file name="SYS_SPLIT_HORZ" path="theme_sys_res\sys_split_horz.png" />
    13.     <file name="SYS_PROG_BKGND" path="theme_sys_res\sys_prog_bkgnd.png" />
    14.     <file name="SYS_PROG_BAR" path="theme_sys_res\sys_prog_bar.png" />
    15.     <file name="SYS_VERT_PROG_BKGND" path="theme_sys_res\sys_vert_prog_bkgnd.png" />
    16.     <file name="SYS_VERT_PROG_BAR" path="theme_sys_res\sys_vert_prog_bar.png" />
    17.     <file name="SYS_SLIDER_THUMB" path="theme_sys_res\sys_slider_thumb.png" />
    18.     <file name="SYS_TAB_PAGE" path="theme_sys_res\sys_tab_page.png" />
    19.     <file name="SYS_BTN_MINIMIZE" path="theme_sys_res\sys_btn_minimize.png" />
    20.     <file name="SYS_BTN_RESTORE" path="theme_sys_res\sys_btn_restore.png" />
    21.     <file name="SYS_BTN_CLOSE" path="theme_sys_res\sys_btn_close.png" />
    22.     <file name="SYS_BTN_MAXIMIZE" path="theme_sys_res\sys_btn_maximize.png" />
    23.     <file name="SYS_MENU_CHECK" path="theme_sys_res\sys_menu_check.png" />
    24.     <file name="SYS_MENU_ARROW" path="theme_sys_res\sys_menu_arrow.png" />
    25.     <file name="SYS_MENU_SEP" path="theme_sys_res\sys_menu_sep.png" />
    26.     <file name="SYS_MENU_BORDER" path="theme_sys_res\sys_menu_border.png" />
    27.     <file name="SYS_MENU_SKIN" path="theme_sys_res\sys_menu_skin.png" />
    28.     <file name="SYS_ICONS" path="theme_sys_res\sys_icons.png" />
    29.     <file name="SYS_WND_BKGND" path="theme_sys_res\sys_wnd_bkgnd.png" />
    复制代码
    第三步:在UIDEF资源(通常是init.xml)中添加各个默认资源文件的属性,以便被SOUI的Skin引擎正确解析
    这次需要添加的信息可以从theme_sys_res\sys_xml_skin.xml上获得,如下图所示:
    4.png

    • 直接将sys_xml_skin.xml中的<skin>下的内容拷贝到UIDEF资源(通常是init.xml)下的<skin>标签下即可
      1.     <!--默认界面资源-->
      2.     <imglist name="_skin.sys.checkbox" src="PNG:SYS_CHECKBOX" states="8"  />
      3.     <imglist name="_skin.sys.radio" src="PNG:SYS_RADIO" states="8" />
      4.     <imglist name="_skin.sys.***heckbox" src="PNG:SYS_FOCUS_CHECKBOX"/>
      5.     <imglist name="_skin.sys.focusradio" src="PNG:SYS_FOCUS_RADIO"/>
      6.     <button name="_skin.sys.btn.normal" colorBorder="#7D9EBC" colorUp="#FEFEFE" colorDown="#C6E2FD" colorUpHover="#FEFEFE" colorDownHover="#DBEDFE" colorUpPush="#C6E2FD" colorDownPush="#FEFEFE"/>
      7.     <scrollbar name="_skin.sys.scrollbar" src="PNG:SYS_SCROLLBAR" margin="3" hasgripper="0"/>
      8.     <imgframe name="_skin.sys.border" src="PNG:SYS_BORDER" states="2" margin-x="2" margin-y="2"/>
      9.     <imglist name="_skin.sys.dropbtn" src="PNG:SYS_DROPBTN" states="3"/>
      10.     <imglist name="_skin.sys.tree.toggle" src="PNG:SYS_TREE_TOGGLE" states="6"/>
      11.     <imglist name="_skin.sys.tree.checkbox" src="PNG:SYS_TREE_CHECKBOX" states="9"/>
      12.     <imglist name="_skin.sys.tab.page" src="PNG:SYS_TAB_PAGE" states="3"/>
      13.     <imgframe name="_skin.sys.header" src="PNG:SYS_HEADER" margin-x="3" margin-y="3" states="4"/>
      14.     <imgframe name="_skin.sys.split.vert" src="PNG:SYS_SPLIT_VERT" top="20" bottom="10"/>
      15.     <imgframe name="_skin.sys.split.horz" src="PNG:SYS_SPLIT_HORZ" left="20" right="10"/>
      16.     <imgframe name="_skin.sys.prog.bkgnd" src="PNG:SYS_PROG_BKGND" margin-x="5"/>
      17.     <imgframe name="_skin.sys.prog.bar" src="PNG:SYS_PROG_BAR" margin-x="3"/>
      18.     <imgframe name="_skin.sys.vert.prog.bkgnd" src="PNG:SYS_VERT_PROG_BKGND" margin-y="5"/>
      19.     <imgframe name="_skin.sys.vert.prog.bar" src="PNG:SYS_VERT_PROG_BAR" margin-y="3"/>
      20.     <imglist name="_skin.sys.slider.thumb" src="PNG:SYS_SLIDER_THUMB" states="4"/>

      21.     <imglist name="_skin.sys.btn.close" src="PNG:SYS_BTN_CLOSE" states="3" />
      22.     <imglist name="_skin.sys.btn.minimize" src="PNG:SYS_BTN_MINIMIZE" states="3" />
      23.     <imglist name="_skin.sys.btn.maximize" src="PNG:SYS_BTN_MAXIMIZE" states="3" />
      24.     <imglist name="_skin.sys.btn.restore" src="PNG:SYS_BTN_RESTORE" states="3" />

      25.     <imglist name="_skin.sys.menu.check" src="PNG:SYS_MENU_CHECK" states="3" />
      26.     <imglist name="_skin.sys.menu.arrow" src="PNG:SYS_MENU_ARROW" states="2" />
      27.     <imgframe name="_skin.sys.menu.sep" src="PNG:SYS_MENU_SEP" left="25"/>
      28.     <imgframe name="_skin.sys.menu.border" src="PNG:SYS_MENU_BORDER" margin-x="2" margin-y="2"/>
      29.     <imgframe name="_skin.sys.menu.skin" src="PNG:SYS_MENU_SKIN" states="2" left="25" top="2" bottom="2"/>
      30.     <imglist name="_skin.sys.icons" src="PNG:SYS_ICONS" states="12"/>
      31.     <imgframe name="_skin.sys.wnd.bkgnd"  src="PNG:SYS_WND_BKGND" left="5" right="5" top="40" bottom="40"/>
      复制代码
      最后,为了避免出现资源冲突,将SOUI工程中自动加载soui-sys-resource.dll里面的资源文件代码注释
    • 即可,如图所示:
    • 5.png
    • 整合完成o(∩_∩)o……

      参考资料:
      - 《第四篇:SOUI资源文件组织》





  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
     楼主| 发表于 2019-9-18 15:02:47 | 显示全部楼层
    SOUI 将 soui-sys-resource.dll 静态编译到exe中方法.版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/w839687571/article/details/89310453
    来源:  https://ui520.cn/bbs/topic/100-1.html



    soui向导中支持将soui-sys-resource中的资源编译进PE

    也可以手动改源码编译进PE,方式如下:

    1,在winmain中修改资源加载方式
    SApplication *theApp = new SApplication(pRenderFactory, hInstance);
        {
             CAutoRefPtr<IResProvider> sysResProvider;
             CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
             sysResProvider->Init((WPARAM)hInstance, 0);
             theApp->LoadSystemNamedResource(sysResProvider);
        }
    2, 修改工程目录下面的rc文件,添加如下代码,该文件中有2处地方要添加

       "#include ""theme_sys_res.rc2"" //SOUI系统资源\r\n"

    3,在工程属性-资源-常规-附加包含目录里面添加soui的系统资源目录

    "$(SOUIPATH)\soui-sys-resource"




  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
     楼主| 发表于 2019-9-18 15:07:33 | 显示全部楼层
    下面为QQ群中高手的回答
    【SOUI作者】@请充值 14:33:40
    可以的。

    【SOUI作者】@请充值 14:33:51
    把系统资源编译到exe就好了。

    你撤回了一条消息

    【渡劫】SOUI-凝望着 14:34:56
    1.jpg

    【渡劫】SOUI-凝望着 14:34:59
    @小白

    【渡劫】SOUI-凝望着 14:35:48
    2.png
    【管理员】小白 14:36:19
    我试试

    【渡劫】SOUI-凝望着 14:36:34
    将资源资源编译到exe里面

    【渡劫】SOUI-凝望着 14:36:40
    或者是模块的dll里面

    【008】浪里白条 14:38:01
    不只这

    【008】浪里白条 14:38:28
    要改rc把souires加进去

    【渡劫】SOUI-凝望着 14:38:42
    3.png

    【渡劫】SOUI-凝望着 14:39:00
    我第二个图里面有啊

    【渡劫】SOUI-凝望着 14:39:22

    4.jpg
    【管理员】小白 14:39:36
    @SOUI-凝望着 论坛发个小demo吧,我用币支持你

    【渡劫】SOUI-凝望着 14:40:24
    demo用那个项目生成就有

    【渡劫】SOUI-凝望着 14:40:43
    只是需要人讲解注意的地方

    【渡劫】SOUI-凝望着 14:46:29
    @小白
    5.png
    【渡劫】SOUI-凝望着 14:46:46
    你先用向导生成一个,然后自己看看就行了



  • TA的每日心情
    开心
    2021-8-19 09:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    21

    帖子

    159

    积分

    24:00金丹期

    Rank: 2

    积分
    159
    发表于 2023-4-24 20:03:36 | 显示全部楼层
    用SOUI界面库做了个测试使用的小软件,打包后安装到新电脑上发现运行不报任何错也不显示界面没任何反应,查了很久才找到原因,主要还是缺dll。

    解决办法:

    我的做法就是SOUI 源码编译后会生成一个bin64(你写的程序 64位的就是这个目录 32位的是bin目录)的目录,把这个目录下所有的dll 复制到新电脑上随意放到D盘或C盘的一个目录下,这个目录叫XXX,然后环境变量的path里把这个目录加进去,然后运行你写的SOUI库的软件 这样就能正常启动你写的软件了,软件启动后把XXX这个目录下所有dll全选 删除如果哪个dll被占用说明你的软件用到了SOUI的dll了,然后就把这几个dll 复制到你的运行软件的目录下就可以了,我的软件缺少以下dll:

    imgdecoder-gdip.dll

    render-gdi.dll

    我把这两个dll放进去就能正常启动了,折腾了一上午这里做个记录。
  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
     楼主| 发表于 2023-4-24 22:31:17 | 显示全部楼层
    qhs1573 发表于 2023-4-24 20:03
    用SOUI界面库做了个测试使用的小软件,打包后安装到新电脑上发现运行不报任何错也不显示界面没任何反应,查 ...

    谢谢分享
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛

    GMT+8, 2024-5-18 15:13

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表