zoukankan
html css js c++ java
C#如何动态调用DLL中类的方法以及属性
在C#中可以通过Assembly来动态加载DLL,然后由它创建类型,接着通过类型的InvokeMember方法来调用DLL中类的方法以及属性。
为了方便说明一下的方法,先说明一下DLL的代码,大致如下:
using
System;
namespace
clsTestDll
{
/**/
///
<summary>
///
Summary description for TestDll.
///
</summary>
public
class
TestDll
{
private
string
strName;
public
TestDll()
{
//
//
TODO: Add constructor logic here
//
strName
=
""
;
}
public
string
GetValue(
int
nCount )
{
return
string
.Format(
"
Count is {0}!
"
, nCount );
}
public
static
string
GetNewValue(
int
nCount )
{
return
string
.Format(
"
New count is {0}!
"
, nCount );
}
public
string
Name
{
get
{
return
strName;}
set
{ strName
=
value;}
}
}
}
大致的步骤如下:
首先加载DLL,具体如下:
//
Load assembly from dll file
Assembly assembly
=
Assembly.LoadFrom(
"
clsTestDll.dll
"
);
其次,用加载的assembly来定义指定的类型,例如:
//
Create new type
Type t
=
assembly.GetType(
"
clsTestDll.TestDll
"
);
然后就可以通过新建的类型来调用类的方法。
如果是类的静态方法,可以直接调用,如:
//
Call static member function by name
string
strReturn
=
(
string
) t.InvokeMember(
"
GetNewValue
"
,
BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.Static
|
BindingFlags.InvokeMethod,
null
,
null
,
new
object
[]
{
12
}
);
如果是类的非静态方法或属性,则需要通过类型,先生成类的对象,如:
//
Create new object of specific class name
Object obj
=
t.InvokeMember(
null
,
BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.CreateInstance,
null
,
null
,
null
);
接着,就可以通过“obj”对象来进行调用了,如:
//
Call member function by name
strReturn
=
(
string
) t.InvokeMember(
"
GetValue
"
,
BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.InvokeMethod,
null
,
obj,
new
object
[]
{
12
}
);
//
Set class property
t.InvokeMember(
"
Name
"
,
BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.SetProperty,
null
,
obj,
new
Object[]
{
"
Test
"
}
);
//
Get class property
strReturn
=
(
string
) t.InvokeMember(
"
Name
"
,
BindingFlags.DeclaredOnly
|
BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.GetProperty,
null
,
obj,
null
);
查看全文
相关阅读:
启动vmware虚拟机报错:“无法获得VMCI驱动程序的版本:句柄无效”
vmware虚拟机环境下配置centos为静态IP的步骤
VirtualBox安装增强功能报错
eclipse中的yaml插件
问题解决java.lang.IllegalArgumentException at org.springframework.asm.ClassReader
git的使用笔记
springcloud学习笔记(六)Spring Cloud Zuul
springcloud学习笔记(五)Spring Cloud Actuator
springcloud学习笔记(四)Spring Cloud Hystrix
springcloud学习笔记(三)Spring Cloud Ribbon
原文地址:https://www.cnblogs.com/pricks/p/1601827.html
最新文章
Activity设置为对话框属性时(Theme.Dialog)时,改变其在屏幕中的位置
控制对话框风格的activity的显示大小与位置
Activity设置Dialog属性点击区域外消失实现方式
在Android Studio中打开Android Device Monitor时报错的解决方法
@SuppressLint("NewApi")和@TargetApi()的区别
@TargetAPI + 版本判断实现高低API版本兼容
Timer 与 TimerTask 示例
AngularJS中移动页面滚动穿透解决方案
解决input框中加入disabled="disabled"之后,改变字体的颜色(默认的是灰色)
ScrollView嵌套ListView只显示一行解决方案
热门文章
django 文档生成器
python sort和sorted函数
debian linux 下设置开机自启动
js刷新小知识点
href="javascript:void(0)" 的用法
vs 2017打包安装包(印象深刻)
python 搭建ftp服务器
python 获取视频文件的大小,时长等
django-mptt 树形结构的实现
git 权限问题:insufficient permission for adding an object to repository database .git
Copyright © 2011-2022 走看看