关于插件的例子

在网上想找个plugin的例子,找了很久才找到,写下以后查阅。

 public interface IPlugin
 {
  Int32 Add(Int32 a, Int32 b);
  string Name{get;set;}
  IPluginHost Host{get;set;}
  void Show();
 }

 /// <summary>
 /// The host
 /// </summary>
 public interface IPluginHost
 {
  bool Register(IPlugin ipi);
 }

 

 

 

class PlugIn : IPlugin
 {
  private string m_strName;
  private IPluginHost m_Host;
  
  public PlugIn()
  {
   m_strName = "Dynamic";
  }
  
  public Int32 Add(Int32 a, Int32 b)
  {return a + b;}
  
  public string Name
  {
            get
            {
                return m_strName;
            }
            set
            {
                m_strName=value;
            }
        }
  
  public void Show()
  {
   Main1 mn = new Main1();
   mn.ShowDialog();
  }

  public IPluginHost Host
  {
   get
            {
                return m_Host;
            }
   set
   {
    m_Host=value;
    m_Host.Register(this);
   }
  }
 }

 

 

 

using System.Configuration;
using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using PlugIn;
using System.Reflection;

namespace PluginWindowTest
{
 /// <summary>
 /// Summary description for Form1.
 /// </summary>
 public class Form1 : System.Windows.Forms.Form, IPluginHost
 {
  private System.Windows.Forms.MainMenu mainMenu1;
  private System.Windows.Forms.MenuItem menuItem1;

  private IPlugin[] ipi;

  /// <summary>
  /// Required designer variable.
  /// </summary>
  private System.ComponentModel.Container components = null;

  public Form1()
  {
   //
   // Required for Windows Form Designer support
   //
   InitializeComponent();

   //
   // TODO: Add any constructor code after InitializeComponent call
   //
  }

  /// <summary>
  /// Clean up any resources being used.
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows Form Designer generated code
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
   this.mainMenu1 = new System.Windows.Forms.MainMenu();
   this.menuItem1 = new System.Windows.Forms.MenuItem();
   //
   // mainMenu1
   //
   this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                       this.menuItem1});
   //
   // menuItem1
   //
   this.menuItem1.Index = 0;
   this.menuItem1.Text = "Plugin";
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   this.ClientSize = new System.Drawing.Size(520, 357);
   this.Menu = this.mainMenu1;
   this.Name = "Form1";
   this.Text = "Form1";
   this.Load += new System.EventHandler(this.Form1_Load);

  }
  #endregion

  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

  private void Form1_Load(object sender, System.EventArgs e)
  {
   string path = Application.StartupPath;
            MessageBox.Show(path);
   string[] pluginFiles = Directory.GetFiles(path, "*.dll");
   ipi = new IPlugin[pluginFiles.Length];
   for(int i=0; i<pluginFiles.Length; i++)
   {
    string args = pluginFiles[i].Substring(
     pluginFiles[i].LastIndexOf("//")+1,
     pluginFiles[i].IndexOf(".dll")-
     pluginFiles[i].LastIndexOf("//")-1);

    Type ObjType = null;
    //IPlugin ipi;
    // load the dll
    try
    {
     // load it
     Assembly ass = null;
     ass = Assembly.Load(args);
     if (ass != null)
     {
      ObjType = ass.GetType(args+".PlugIn");
     }
    }
    catch (Exception ex)
    {
     Console.WriteLine(ex.Message);
    }
    try
    {
     // OK Lets create the object as we have the Report Type
     if (ObjType != null)
     {
      ipi[i] = (IPlugin)Activator.CreateInstance(ObjType);
      ipi[i].Host = this;
      Console.WriteLine("ipi.Add(1,2)=" + ipi[i].Add(1,2));
     }
    }
    catch (Exception ex)
    {
     Console.WriteLine(ex.Message);
    }

    //    Start(assemname);
   }
   //MessageBox.Show(ConfigurationSettings.AppSettings["App"]);
  }

  public void Start(string args)
  {
   Type ObjType = null;
   IPlugin ipi;
   // load the dll
   try
   {
    // load it
    Assembly ass = null;
    ass = Assembly.Load(args);
    if (ass != null)
    {
     ObjType = ass.GetType(args+".PlugIn");
    }
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex.Message);
   }
   try
   {
    // OK Lets create the object as we have the Report Type
    if (ObjType != null)
    {
     ipi = (IPlugin)Activator.CreateInstance(ObjType);
     ipi.Host = this;
     Console.WriteLine("ipi.Add(1,2)=" + ipi.Add(1,2));
    }
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex.Message);
   }
  }

  public bool Register(IPlugin ipi)
  {
   MenuItem mn = new MenuItem(ipi.Name,new EventHandler(NewLoad));

   Console.WriteLine("Registered: " + ipi.Name);
   menuItem1.MenuItems.Add(mn);
   return true;
  }

  private void NewLoad(object sender, System.EventArgs e)
  {
   MenuItem mn = (MenuItem)sender;

   for(int i=0; i<ipi.Length; i++)
   {
    string strType = mn.Text;
    if(ipi[i]!=null)
    {
     if(ipi[i].Name==strType)
     {
      ipi[i].Show();
      break;
     }
    }
   }   
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值