读书人

神器,一个关于动态加载DLL后卸载的有关

发布时间: 2012-06-05 13:54:06 作者: rapoo

神器,一个关于动态加载DLL后卸载的问题
原本直接加载

C# code
Object obj = new Object();MethodInfo mi = myc.GetType(DllPath, classNamespace, className, methodName, ref obj);return (string)mi.Invoke(obj, args);

C# code
        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);//通过方法名称获得方法        }

使用域加载
C# code
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);


C# code
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                  }    }}

出于需要卸载DLL 使用域后,函数调用时出错
有人知道错在哪,或者给个例子

[解决办法]
不了解,留名学习学习
[解决办法]
同上!
[解决办法]
帮顶
[解决办法]
http://hi.baidu.com/hejun527/blog/item/806a4103e88e87f208fa93bf.html

读书人网 >C#

热点推荐