cxiはdllファイルを動的にロードし、呼び出し方法を実現する(推奨)


以下はテストコードです。
新しいclassilibraryを作って、2つのクラスのクラスのクラスのクラスのクラスのクラスのクラスの1とクラスの2つの種類の中でそれぞれ1つの方法があって、すべて1つの文字列を返すので、コードは下記の通りです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mydll
{
  public class Class1
  {
    public Class1()
    {

    }
    public string sayhello()
    {
      return "hello,word!";
    }
  }

  public class Class2
  {
    public Class2()
    {

    }

    public string saybeautiful()
    {
      return "beautiful,very good!";
    }
  }

}

コンパイルが完了するとmydl.dllダイナミックリンクライブラリが作成され、windformプロジェクトが新たに作成されます。

private void button1_Click(object sender, EventArgs e)
    {
      string path = @"D:\123\mydll\mydll\bin\Debug\mydll.dll";


      //Byte[] byte1 = System.IO.File.ReadAllBytes(path);//     
      //Assembly assem = Assembly.Load(byte1);

      Assembly assem = Assembly.LoadFile(path);


      //string t_class = "mydll.Class1";//        dll  ,                  ,         :

      //string t_class = "mydll.Class1,mydll";//                 ,  “    .  ……  ”;      ,       “,    ”;

      //    thy38   。

      //Type ty = Type.GetType(t_class);//        ty=null,     ,        

      Type[] tys = assem.GetTypes();//          ,    ,          
      foreach (Type ty in tys)//huoquleiming
      {
        if (ty.Name == "Class1")
        {
          ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//           
          object magicClassObject = magicConstructor.Invoke(new object[] { });//                 

          //object magicClassObject = Activator.CreateInstance(t);//                 
          MethodInfo mi = ty.GetMethod("sayhello");
          object aa=mi.Invoke(magicClassObject, null);
          MessageBox.Show(aa.ToString());//      class1 sayhello  
        }
        if (ty.Name == "Class2")
        {
          ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//           ,                    ,         
          object magicClassObject = magicConstructor.Invoke(new object[] { });
          MethodInfo mi = ty.GetMethod("saybeautiful");
          object aa = mi.Invoke(magicClassObject, null);//      ,   null        
          MessageBox.Show(aa.ToString());
        } 
      }

      //AppDomain pluginDomain = (pluginInstanceContainer[key] as PluginEntity).PluginDomain;
      //if (pluginDomain != null)
      //{
      //  AppDomain.Unload(pluginDomain);
      // } 

    }

以上のcxiはdllファイルを動的にロードし、その中で呼び出す方法(推奨)を実現しました。つまり、小編集が皆さんに共有する内容です。参考にしていただければ幸いです。どうぞよろしくお願いします。