C#动态加载DLL

C#中使用反射来动态加载和卸载DLL <br />在 C#中我们也能使用Assembly.LoadFile实现动态加载DLL,但是当你试图卸载时,你会很惊讶的发现Assembly没有提供任何卸载的方 法。这是由于托管代码的自动垃圾回收机制会做这件事情,所以C#不提供释放资源的函数,一切由垃圾回收来做。这引发了一个问题,用Assembly加载DLL可能只在程序结束的时候才会被释放,这也意味着在程序运行期间无法更新被加载DLL。而这个功能在某些程序设计时是非常必要的,考虑你正在用反射 机制写一个查看DLL中所有函数 阅读详情

由于从iPhone转入到WP7,所以又要开始学习C#了(wp7使用silverlight开发),本想研究一下C#如何动态加载dll,可惜发现在wp7,Assembly中的LoadFrom被设置为[SecurityCritical],看来动态之路估计不是这么好走的,不过先把“C#动态加载DLL”记录以下吧。

 

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

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

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

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

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

 

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

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

 

调用类型中的某个方法:

需要首先得到此方法

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

 

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

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

 

C#动态加载DLL界面方法实战指南 反射(Reflection)是 .NET 提供的一种运行时动态分析和操作程序集、类型、方法和对象的能力。通过反射机制,开发者可以在程序运行期间动态获取类型信息、创建对象实例、调用方法、访问属性等,而无需在编译时明确知道具体的类型信息。这种灵活性使得反射在插件系统、依赖注入、序列化、ORM(对象关系映射)等场景中具有重要作用。反射的核心功能包括:动态加载程序集:可以在运行时加载外部 DLL 文件。获取类型信息:包括类、接口、方法、属性、字段、事件等。动态创建实例。 阅读详情

相关推荐

C#实现DLL热插拔

使用AppDomain实现不重启进程的dll的重复加载

一步一步开发Game服务器(三)加载脚本和服务器热更新

大家可能对游戏服务器的运行不太理解或者说不太清楚一些机制。 但是大家一定会明白一点,当程序在运行的时候出现一些bug,必须及时更新,但是不能重启程序的情况下。 这里牵涉到一个问题。比如说在游戏里面,,如果一旦开服,错非完全致命性bug,否则是不能频繁重启服务器程序的, 你重启一次就可能流失一部分玩家。那么就牵涉到程序热更新修复bug功能。 今天就来扒一扒热更新的事情。 java和C#的加...

weixin_30246221的博客 429

C#动态装卸DLL文件

上一个以前用过项目中的简化案例, 为了控制进程间通讯,实际情况要复杂的多:  [1]接口namespace MyAddin{ public interface IAddin { void PrintName(); }} [2]dll文件using System;namespace MyAddin{

微创社(MCC) 1134

C#通过Dll实现函数热更

dll里面加入新的类。Dll替换前的程序集。Dll替换后的程序集。

qq_45796212的博客 1950

c#实现动态加载Dll

原理如下: 1、利用反射进行动态加载和调用.  Assembly assembly=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名   2、加载dll后,需要使用dll中某类. T

ybhjx的专栏 1901

c#动态加载dll文件

    1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置。 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.T...

weixin_34194702的博客 196

使用C#动态加载DLL文件

** 使用C#动态加载DLL文件 ** 1.首先用到kernel32.dll API函数,对于C#来说调用windows API 还是蛮简单的事件。只需要声明一下就可以了。 //加载DLL [DllImport(&amp;quot;kernel32.dll&amp;quot;, SetLastError = true ,CharSet = CharSet.Auto)] private extern sta...

Avatarhhh的博客 7556

C#动态加载和卸载DLL

C#动态加载和卸载DLL<!-- alimama_pid="mm_10249644_1605763_4929893"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_

3408

C# 动态加载dll

以上方式发现dll的路径是固定的,我们通过以下方式可以成功加载dll

Z_W_H_的博客 1974

C# 动态加载卸载 DLL

我最近做的软件,需要检测dll或exe是否混淆,需要反射获得类名,这时发现,C#可以加载DLL,但不能卸载DLL。于是在网上找到一个方法,可以动态加载DLL,不使用时可以卸载。

lindexi 9070

C#动态加载dll

/// <summary> /// 动态加载DLL,C#.net框架的dll /// </summary> /// <param name="lpFileName">DLL路径</param> /// <param name="Namespace">命名空间</param> /// <param name="ClassName">类名</.

ad13adsa的博客 1720

C#中实现动态加载dll

    C#中要使用动态链接库中的导出函数,只能在程序中根据DllAtribute显示调用,无法在运行阶段动态加载,但是我们可以利用WIN32 API的LoadLibrary和FreeLibrary打到目的,问题是根据GetProcAddress()函数获取到的导出函数的地址无法在C#中利用,网上很多方法多是利用对函数调用栈的操作来达到在C#中操作的目的.    其实如果导出函数没有返回值,完

常海龙的blog 5761

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

.net中常会用到动态加载DLL,而DLL中可能包含各种参数、方法、窗体,如何来调用动态加载这些参数、方法、窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间 (1) AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器 (2) Assembly:程序集类 (3) Module:模块类 (4) Type:使用反射得到类型信息的最核心的类 他们之间是一种从属关系,也就是说,一个AppDomain可...

钢铁男儿 3862

c# 动态加载dll文件

/// <summary> /// 动态加载DLL /// </summary> /// <param name="lpFileName">DLL路径</param> /// <param name="Namespace">命名空间</param> ...

weixin_30414245的博客 655
上一篇: File extensions of Objective-C code
下一篇: 高效的WP7程序--简介
Jonason123
博客等级 码龄20年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值