博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#实现动态加载Dll
阅读量:6551 次
发布时间:2019-06-24

本文共 1805 字,大约阅读时间需要 6 分钟。

原文:

原理如下:

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

 Assembly assembly=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、调用类型中的某个方法:
需要首先得到此方法
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; } }

转载地址:http://dnfco.baihongyu.com/

你可能感兴趣的文章
UITableView 基本使用方法总结
查看>>
如何编写高性能sql语句
查看>>
网站访问速度测试
查看>>
微信小程序教学第四章第一节(含视频):小程序中级实战教程:详情-页面制作...
查看>>
Spring中的AOP(七)——基于XML配置文件方式的AOP
查看>>
xshell无法在vim中复制黏贴
查看>>
SecureCRT 官网有Ubuntu12.04的软件包下载
查看>>
一位IT高管20年的职场心经
查看>>
Linux 逻辑卷LVM创建扩展删除实例
查看>>
MySQL多主多从架构实现及主从复制问题处理
查看>>
Fedora下用rpm安装JDK
查看>>
spring整合hessain 访问远程服务
查看>>
PXE网络安装linux
查看>>
关于在angular2及以上版本引入bootstrap 并有提示功能
查看>>
十三、rsync+inotify的使用
查看>>
挨踢部落故事汇(16):技术人疲倦期的最佳实践
查看>>
SDJZUOJ迷宫问题(BFS)
查看>>
什么是数据库事务
查看>>
我的友情链接
查看>>
浅说RAID和LVM
查看>>