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
);
查看全文
相关阅读:
Ant学习实例
ant 使用指南
tomcat配置管理用户名密码
纯JAVA驱动:sqlserver版本不同,驱动与连接也有所区别
STRUTS2获得session和request
SSH整合,"sessionFactory " or "hibernateTemplate " is required异常
tmp
让Tomcat支持中文文件名
postgreSQL初步使用总结
postgreSQL9.1忘记postgres用户密码怎么办
原文地址:https://www.cnblogs.com/pricks/p/1601827.html
最新文章
文章搜素—最终版
文章搜索——初步完成之前的构想
初步完成
自定义NSOperation
做环信聊天布局时遇到的问题(UITextView自适应高度和光标位置不正常)
WKWebView与Js交互
数据持久化(一)--NSKeyedArchiver
Layout--iOS
内存模型
c语言模拟实现oc引用计数
热门文章
objective-c系列-单例
objective-c系列-动态类型和动态绑定
objective-c系列-@Property&点语法
objective-c系列-NSDictionary&NSMutableDictionary
objective-c系列-NSMutableArray
objective-c系列-NSArray
Spring如何管理Session【转贴】
将 jsp 页面的值 传到struts2 action中(不是表单中的值)
struts2总结【转载】
利用Tomcat的用户名和密码构建“永久”后门
Copyright © 2011-2022 走看看