以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  装载外部DLL 全攻略(转载)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=11832)


--  作者:admin
--  发布时间:11/9/2004 2:26:00 AM

--  装载外部DLL 全攻略(转载)


发信人: Nineteen (-_-#!), 信区: DotNET
标  题: 装载外部DLL 全攻略(转载)
发信站: BBS 水木清华站 (Fri Dec  5 09:54:51 2003), 转信

装载外部DLL 全攻略  
其它位置:CSDN  
Key: 装载外部DLL,Assembly,Type,反射,装配件. Author: ArLi @ http://www.zpcity.com/arli/
例DLL 文件内容如下:

using System;
using System.Windows.Forms;

namespace ArLi.CommonPrj {
public class ShowAboutBox {
  public static void ShowOn(Form fm) {
   MessageBox.Show("OK");
  }
}
}

编译后文件名叫 AboutBox.dll

主程序里调用方法如下:

//定义文件名
FileInfo aBoxFile = new FileInfo(Path.Combine(Application.StartupPath,"AboutBox.dll"));

if (aBoxFile.Exists) { //如果存在
try { //预防意外,比如不载不完整,非法DLL
  // 开始载入
  Assembly aBox = Assembly.LoadFrom(aBoxFile.FullName);  
  Type[] _t = aBox.GetTypes(); //获得全部Type
  foreach (Type t in _t) { //遍历
   //如果发现名称空间和类名有相符的
   if (t.Namespace == "ArLi.CommonPrj" && t.Name == "ShowAboutBox") {
    //载入方法
    MethodInfo m = t.GetMethod("ShowOn");
    if (m != null) { //如果要载入的方法存在
     //创建实例
     object o = Activator.CreateInstance(t);
     //执行该方法,后面的this 是参数
     m.Invoke(o,new object[]{this});
    }
    else { //载入的方法不存在
     MessageBox.Show("File \"AboutBox.dll\" Invalid!\n\nMethod Error.");
    }
    return;
   }
  }
  MessageBox.Show("File \"AboutBox.dll\" Invalid!\n\nAssembly Name Error.");
} //文件、命名空间、方法都相符,但执行该DLL 内容出错
catch (System.NullReferenceException ex) {
  MessageBox.Show("File \"AboutBox.dll\" Invalid!");
} //文件非正常DLL
catch (Exception ex) {
  MessageBox.Show("File \"AboutBox.dll\" Error: \n\n" + ex.Message);
}
}
else { //文件没找到
MessageBox.Show("File \"AboutBox.dll\" Missing!");
}

说明1: 如果直接用 type t = gettype("arli.comm...") 这样也可以但如果此class 不存在就会出Exception
说明2:这种逆向反射动态载入无需定义装配件信息
说明3:此方法已经最大程度的进行了潜在的检测,除非非合法的WinDLL(比如下载的不完整),否则不会进入到很慢的 try catch
  
2003.9.10  

--
——长夜漫漫,无心睡眠……难道狼妹妹也睡不着吗?


※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.206.3.3]
上一篇
返回上一页
回到目录
回到页首
下一篇



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms