zoukankan      html  css  js  c++  java
  • 添加和读取Resources嵌入资源文件(例如.dll和.ssk文件)

    前言:
    有些程序运行的时候,可能调用外部的dll,用户使用时可能会不小心丢失这些dll,导致程序无法正常运行,因此可以考虑将这些dll嵌入到资源中,启动时自动释放。对于托管的dll,我们可以用打包软件合成一个exe(例如利用Imerge),但是对于一些用C++等写的非托管dll,就比较麻烦。在这种情况下,大家可以考虑本文介绍的方法。

    1、右键项目选择“属性” → 资源,单击“添加资源”,选择“添加现有文件”

    2、点击保存后,我们可以在项目中看到一个Resources文件夹,里面存放的就是我们添加的文件。

    3、在FrmMian.cs窗口代码中编写加载dll的代码,如下:

    public partial class FrmMian : Form
    {
            public FrmMian()
            {
                //加载嵌入资源
                AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
                InitializeComponent();
            }
            /// <summary>
            /// 加载嵌入资源中的全部dll文件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="args"></param>
            /// <returns></returns>
            System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
            {
                string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");
                dllName = dllName.Replace(".", "_");
                if (dllName.EndsWith("_resources")) return null;
                System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
                byte[] bytes = (byte[])rm.GetObject(dllName);
                return System.Reflection.Assembly.Load(bytes);
            }
    }
    

    4、读取Resources资源中的skin.ssk皮肤

    public partial class FrmMian : Form
    {
            public FrmMian()
            {        
                InitializeComponent();
                //1.初始化皮肤
                Sunisoft.IrisSkin.SkinEngine se = this.skinEngine1;
                se.SkinAllForm = true;
                //2.读取Resources资源中的skin.ssk皮肤
                byte[] obj = (byte[])时间校正器.Properties.Resources.ResourceManager.GetObject("skin");
                se.SkinStream = new MemoryStream(obj);
                //3.设置皮肤
                //se.SkinFile = Application.StartupPath + "//Skins/Calmness.ssk";
            }
    }
  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/codedisco/p/12593374.html
Copyright © 2011-2022 走看看