zoukankan      html  css  js  c++  java
  • C# 插件编写

    //加载插件
    private void LoadPlugins()
    {
      string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "addons");

      //搜索该目录下的所有的程序集文件,这里就只搜索*.dll文件
      string[] dlls = Directory.GetFiles(path, "*.dll");

      //动态加载每个dll 文件
      foreach (string dllPath in dlls)
      {
        //加载每个程序集
        Assembly assembly = Assembly.LoadFile(dllPath);

        //需要一个接口来进行约定
        Type typeIEditor = typeof(IEditor);

        //获取当前加载的程序集中的所有的public类型
        Type[] types = assembly.GetExportedTypes();

        //遍历判断哪个类型实现了该接口
        foreach (Type userType in types)
        {
          //判断这个类型必须是实现了IEditor接口的类型,并且该类型必须不是抽象的。
          if (typeIEditor.IsAssignableFrom(userType) && !userType.IsAbstract)
          {
            IEditor plugin = (IEditor)Activator.CreateInstance(userType);

            //把插件名称加载到菜单栏上
            //Add()方法的返回值就是刚刚增加的菜单项
            ToolStripItem tsi = tsmiFormat.DropDownItems.Add(plugin.Name);
            //为该菜单项增加一个单击事件
            tsi.Click += new EventHandler(tsi_Click);
            tsi.Tag = plugin;
          }
        }
      }

    }

  • 相关阅读:
    VC++学习(16):线程同步与异步套接字
    VC++学习(15):多线程
    VC++学习(12):文件操作
    VC++学习(10):绘图控制
    VC++学习(13):文档串行化
    VC++学习(11):图形的保存和重绘
    VC++学习(18):Active控件
    四大数据库的比较(SQL Server、Oracle、Sybase和DB2)
    Gridview中二级联动
    VS 2008中PDA开发环境的相关配置
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14040090.html
Copyright © 2011-2022 走看看