日期:2014-05-18 浏览次数:21007 次
Object obj = new Object(); MethodInfo mi = myc.GetType(DllPath, classNamespace, className, methodName, ref obj); return (string)mi.Invoke(obj, args);
public MethodInfo GetType(string DllPath, string classNamespace, string className, string methodName, ref object obj)
{
Assembly ass = Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll
//加载dll后,需要使用dll中某类.
Type type = ass.GetType(classNamespace + "." + className);//利用类型的命名空间和名称获得类型
//需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
obj = Activator.CreateInstance(type);//利用指定的参数实例话类型
return type.GetMethod(methodName);//通过方法名称获得方法
}
AppDomain ad = AppDomain.CreateDomain("DLL Unload test");
ProxyObject.ProxyObject obj = (ProxyObject.ProxyObject)ad.CreateInstanceFromAndUnwrap(System.AppDomain.CurrentDomain.BaseDirectory + "bin\\ProxyObject.dll", "ProxyObject.ProxyObject");
return obj.Invoke(DllPath, classNamespace, className, methodName, args);
namespace ProxyObject
{
[Serializable]
public class ProxyObject : MarshalByRefObject
{
public string Invoke(string DllPath, string classNamespace, string className,string methodName, object[] args)
{
Object obj = new Object();
Assembly ass = Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll
//加载dll后,需要使用dll中某类.
Type type = ass.GetType(classNamespace + "." + className);//利用类型的命名空间和名称获得类型
//需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
obj = Activator.CreateInstance(type);//利用指定的参数实例话类型
MethodInfo mi= type.GetMethod(methodName);//通过方法名称获得方法
return (string)mi.Invoke(obj, args);//报错 用的目标发生了异常。TargetInvocationException
}
}
}