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

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

xjtudll4年前 (2022-03-20)技术心得6240

.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://xjtudll.cn/Exp/638/

标签: C#
分享给朋友:

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

Altium导入网表Netlist

Altium导入网表Netlist

用Altium的时候,发现原来Protel99SE里面的通过Netlist更新到PCB的功能不见了。乍一看,似乎只能通过Update来更新PCB了,其实不然,原来通过Netlist更新PCB的功能依然存在,只是难以找到这个功能菜单而已。 在Altium里面,是show difference方式的,...

Cool Edit Pro生成周期性方波

Cool Edit Pro生成周期性方波

工作中有时候要生成一些周期性方波,如下图所示: 利用Cool Edit Pro 2.0可以轻易的做到这一点,操作方法如下: 菜单栏:【生成】-> 【音调】 在弹出的窗口进行如下设置: (1) 勾选 【固定设置】 (2) 设定基础频率,调味特性,频率成分 A、基础频率:要生成的方波的频率 B、...

Android:open failed: EACCES (Permission denied) -

参考资料:http://blog.csdn.net/zxkevin1989/article/details/7464550/ 问题: 从SD卡中读取文件,提示open failed: EACCES (Permission denied) - 原因: 从提示基本就能看出是权限问题了,读取SD卡文件需要...

DFC逻辑调频

DFC逻辑调频

2035机芯有个技术指标:DFC。如下图所示。 DFC,全称Digital Frequency Control,即逻辑调频。 我们知道,在所有的电子产品指标中,频率尤为重要,要想获得比较稳定的振荡,最广泛的就是使用石英振子,包括在手机和电脑里都有,石英手表更是如此,它用石英晶体的振荡来做时基,故...

Keil得到C编译之后的汇编代码

Keil得到C编译之后的汇编代码

在Options for Target --> Listing标签页下 在C Compiler Listing: \*.lst部分中勾选Assembly Code,这样生成的LST文件中就会包含汇编源码了。 找到相应的lst文件,如图所示: 用记事本打开,里面就有汇编代码了...

TVS主要技术参数

1、最小击穿电压VBR和击穿电流IR VBR:Reverse Break Down Voltage,反向击穿电压 IR:Reverse Current,击穿电流(有的datasheet上称为IT) VBR是TVS最小的击穿电压,在25℃时,低于这个电压TVS是不会产生雪崩的。当TVS流过规定的1mA...

发表评论

访客

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