当前位置:首页 > 技术心得 > 正文内容

C# 动态加载DLL 通过反射 调用参数、方法、窗体

xjtudll2年前 (2022-03-20)技术心得1180

.net中常会用到动态加载DLL,而DLL中可能包含各种参数、方法、窗体,如何来调用动态加载这些参数、方法、窗体呢?

在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:

System.Reflection命名空间

(1)   AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器

(2)   Assembly:程序集类

(3)   Module:模块类

(4)   Type:使用反射得到类型信息的最核心的类

他们之间是一种从属关系,也就是说,一个AppDomain可以包含N个Assembly,一个Assembly可以包含N个Module,而一个Module可以包含N个Type.

在程序中,如果我们要动态加载一个程序集有以下种方式可以使用,分别是Load、LoadFrom、LoadFile、LoadWithPartialName方法.

其中着重讲解以下Assembly.LoadFile 与 Assembly.LoadFrom的区别

1、Assembly.LoadFile只载入相应的dll文件,比如Assembly.LoadFile("abc.dll"),则载入abc.dll,假如abc.dll中引用了def.dll的话,def.dll并不会被载入。

Assembly.LoadFrom则不一样,它会载入dll文件及其引用的其他dll,比如上面的例子,def.dll也会被载入。

2、用Assembly.LoadFrom载入一个Assembly时,会先检查前面是否已经载入过相同名字的Assembly,比如abc.dll有两个版本(版本1在目录1下,版本2放在目录2下),程序一开始时载入了版本1,当使用Assembly.LoadFrom("2\\abc.dll")载入版本2时,不能载入,而是返回版本1。Assembly.LoadFile的话则不会做这样的检查,比如上面的例子换成Assembly.LoadFile的话,则能正确载入版本2。

LoadFile:加载指定路径上的程序集文件的内容。LoadFrom: 根据程序集的文件名加载程序集文件的内容。

最后是调用方法

Assembly outerAsm = Assembly.LoadFrom(@"urPath\MyDLL.dll");

调用DLL类中的方法

Type type = outerAsm .GetType("MyDLL.MyClass");//调用类型
MethodInfo method = type.GetMethod("MyVoid");//调用方法

//如果需要传参数

object[] paramertors = new object[] { "3087", "2005" };//参数集合
object test = method.Invoke(null, paramertors);//Invoke调用方法

调用DLL中窗体

Type outerForm = outerAsm.GetType("MyForm", false);//找到指定窗口

(Activator.CreateInstance(outerForm) as Form).Show();//转换成窗体类,显示

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/638/

标签: C#
分享给朋友:

“C# 动态加载DLL 通过反射 调用参数、方法、窗体” 的相关文章

OKI单片机调试时如何修改变量值

OKI单片机调试时如何修改变量值

OKI的仿真器有个特点,只要重新load程序,哪怕程序不变,之前加的断点也全部清除。这点与tenx(十速)不同, tenx(十速)的仿真器只要不改变当前文件的程序,当前文件的断点依旧全部保留。 调试程序时,为了验证程序的准确性,需要不停的改变变量值,如果采用在程序里加赋值语句的方法,那必然会改变程序...

静电实验平台的搭建及要求

静电实验平台的搭建及要求

Test setup 1、Cables: 2m, with 470KΩ * 2 ---EUT and Metal HCP (Horizontal Coupling Plate); ---HCP and Metal Plate connected to the ground 2、Insu...

iOS 获取当前正在显示的ViewController

我们在非视图类中想要随时展示一个view时,需要将被展示的view加到当前view的子视图,或用当前view presentViewController,或pushViewContrller,这些操作都需要获取当前正在显示的ViewController。 //获取当前屏幕显示的viewcont...

数码管应用笔记

数码管应用笔记

数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。 为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。 共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图。 一般来...

Word画横线和波浪线的技巧

先回车到一个新的空行,然后在英文状态下,输入三个减号“-”,回车之后即会发现那三个减号就变成了一条整行的横线了。这样画出来的横线具有信纸的效果,比下划线要好很多,不会紧贴着文字。 同样,需要在Word里画波浪线、虚线、双直线或实心线的话,分别输入“~”...

安装VS2010后打开ppt开始配置VS2010

安装VS2010后打开ppt开始配置VS2010

自从安装VS2010后,一打开ppt文件,就开始了配置VS2010的过程,如图所示。 问题的关键是,即使配置完了,下次打开ppt文件还是会提示这个,烦的要死。但是,不管是否等待配置完成或者取消配置,都能打开ppt文件。 网上搜索了一番,找到了解决办法: PowerPoint选项->...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。