博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#反射调用外部Dll,执行其中异步函数并取返回值
阅读量:4655 次
发布时间:2019-06-09

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

using System.Reflection;

 

1.载入Dll

Assembly asm=Assembly.LoadFile(FullPath);//FullPath 为Dll所在位置的全路径。

2.取得所需要的类的类型

Type t = asm.GetType("namespaceName.className");//命名空间名.类名

3.建立此类型的对象(相当于 new)

object o = Activator.CreateInstance(t); //创建Type t类型的对象

4.取得类中想要执行的方法

MethodInfo me = t.GetMethod("TestFunction");

5.取得此方法所需参数列表

ParameterInfo[] para=me.GetParameters();

6.创建参数类型的对象,并传入参数Array

Type re = asm.GetType("TestDll.ReturnClass");  //我的参数类型是TestDll命名空间下 ReturnClass类object reo = Activator.CreateInstance(re);object[] r = { reo };

7.调用函数

Object rr = me.Invoke(o, r);  //如果调用的是非异步函数,此时object rr就是函数的返回值。

8.如果调用的是异步函数

Task task = me.Invoke(o, r) as Task;await task;              object result = task.GetType().GetProperty("Result").GetValue(task, null); //result就是异步函数的返回值

9.反射常用操作

//取得o实例中propertyName属性的值value Type t = asm.GetType("TestDll.TestClass");  object o = Activator.CreateInstance(t);object getproperty = t.GetProperty("propertyName").GetValue(o, null);  //方法一object getproperty1 = o.GetType().GetProperty("propertyName").GetValue(o, null); //方法二 //取得枚举类型中的指定元素 Type enumType = asm.GetType("namespaceName.enumName"); foreach(var name in Enum.GetValues(enumType)) {
   if("elementname"==name.ToString())    {
Convert.ToInt32(name);//转化制定元素为int    } } string[] strname=Enum.GetNames(enumType);//取得枚举所有元素名

10.总结

大概就是,在你不知道Dll的内部结构的情况下,可以通过反射获得Dll内所有信息

 

转载于:https://www.cnblogs.com/cteng-common/p/reflectdll.html

你可能感兴趣的文章
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>
Hibernate二级缓存配置
查看>>
LoadRunner常用术语
查看>>
关于jedis2.4以上版本的连接池配置,及工具类
查看>>
记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
查看>>
mechanize (1)
查看>>
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>
C3P0连接池工具类使用
查看>>
SVN常用命令备注
查看>>
孩子教育
查看>>
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>