調用託管dll的幾種辦法
調用託管dll的幾種辦法
#region 第二种方法 public static void downc(string fnamespace, string fclass, string fmethod) { try { object[] par = new object[1]; par[0] = str; Assembly MyAssembly = AppDomain.CurrentDomain.Load(fnamespace); Type tp = MyAssembly.GetType(fnamespace + "." + fclass); object o = Activator.CreateInstance(tp); MethodInfo m = tp.GetMethod(fmethod); if (m != null) { Form f1 = (Form)m.Invoke(o, par); Application.Run(f1); if (fnamespace == "login") { if (((String[])par[0])[0] != null) { str[0] = ((String[])par[0])[0].ToString(); } } } else { MessageBox.Show("找不到指定的方法!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion #region 第三种方法 public static void fload() { try { object[] par = new object[1]; par[0] = str; AppDomain ad = AppDomain.CreateDomain("webdll1"); Assembly ass = Assembly.LoadFrom("webdll.dll"); object md = ad.CreateInstanceAndUnwrap(ass.FullName, "webdll.login"); Type type = md.GetType(); object o = Activator.CreateInstance(type); MethodInfo mf = type.GetMethod("flogin"); Form f1 = (Form)mf.Invoke(o, par); Application.Run(f1); if (((String[])par[0])[0] != null) { str[0] = ((String[])par[0])[0].ToString(); } Thread.CurrentThread.Abort(); AppDomain.Unload(ad); } catch (Exception mt) { MessageBox.Show(mt.Message); } } #endregion #region 第四种方法 public static void mm() { try { Assembly ad = AppDomain.CurrentDomain.Load("webdll"); Type tp = ad.GetType("webdll.login"); object o = Activator.CreateInstance(tp); MethodInfo mi = tp.GetMethod("ff"); Form f1 = (Form)mi.Invoke(o, null); Application.Run(f1); } catch (Exception mt) { MessageBox.Show(mt.Message); } } #endregion