码迷,mamicode.com
首页 > Web开发 > 详细

.Net常用技巧_动态加载Dll

时间:2014-07-16 23:14:59      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   文件   

原理如下:

1、利用反射进行动态加载和调用.

Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll

Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名

 

2、加载dll后,需要使用dll中某类.

Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型

 

3、需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略

Object obj =Activator.CreateInstance(type,params[]);//利用指定的参数实例话类型

 

4、调用类型中的某个方法:

       注:如果是类的静态方法,可以直接调用,如: string strReturn = (string) type.InvokeMember("GetNewValue",BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.Static|BindingFlags.InvokeMethod,null,       null, new object[]{ 12 } );

 

需要首先得到此方法

MethodInfo mi=type.GetMethod(“MehtodName”);//通过方法名称获得方法

 

5、然后对方法进行调用,多态性利用参数进行控制

mi.Invoke(obj,params[]);//根据参数直线方法,返回值就是原方法的返回值

 

#region 声明动态载入DLL的参数

       object obj=null;

       byte[] filesByte;

       Assembly assembly;

       Type type;

       MethodInfo timerInitial;

       MethodInfo timerDispose;

#endregion


      private void LoadDll()//加载DLL 
       {
            try

           {
                filesByte =File.ReadAllBytes(Path.GetDirectoryName(Application.ExecutablePath) +"\\loadDll.dll");

                assembly =Assembly.Load(filesByte);
                type =assembly.GetType("test.loadDll");
                obj =System.Activator.CreateInstance(type);
                timerStart =tp.GetMethod("TimerStart");
                timerStop =tp.GetMethod("TimerStop");
                if (timerStart != null)
                {
                    timerStart.Invoke(obj,null);
                }
           }
           catch(Exception)
           {

           }
       }

 

以下摘自MSDN

public class A
{
   public virtual int method () {return 0;}
}

public class B
{
   public virtual int method () {return 1;}
}

class Mymethodinfo
{
   public static int Main()
    {
       Console.WriteLine ("\nReflection.MethodInfo");
       A MyA = new A();
       B MyB = new B();

       // Get the Type and MethodInfo.
       Type MyTypea = Type.GetType("A");
        MethodInfo Mymethodinfoa =MyTypea.GetMethod("method");
 
       Type MyTypeb = Type.GetType("B");
       MethodInfo Mymethodinfob = MyTypeb.GetMethod("method");

       // Get and display the Invoke method.
       Console.Write("\nFirst method - " + MyTypea.FullName +
           " returns " + Mymethodinfoa.Invoke(MyA, null));

       Console.Write("\nSecond method - " + MyTypeb.FullName +
           " returns " + Mymethodinfob.Invoke(MyB, null));

       return 0;
    }
}

 

.Net常用技巧_动态加载Dll,布布扣,bubuko.com

.Net常用技巧_动态加载Dll

标签:style   blog   color   使用   os   文件   

原文地址:http://www.cnblogs.com/yuyuanfeng/p/3811434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!