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
);
查看全文
相关阅读:
UE4中集成ProtoBuf
QT之打印 QPrinter
qt界面嵌入外部进程界面
QAxWidget 妙用
UE4嵌入Qt5 三维可视化案例
QSS入门(一)
Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕
成品软件二次开发排第三,低代码的应用场景有哪些?
React 并发功能体验-前端的并发模式已经到来。
Docker与k8s的恩怨情仇(三)—后浪Docker来势汹汹
原文地址:https://www.cnblogs.com/pricks/p/1601827.html
最新文章
如何在Android Studio中添加appCompat/RecyclerView-v7支持包
As/IDEA android java8 lambda表达式支持(retrolambda用法)
如何修改webbrowser里的JS函数
CEF内核浏览器安装、解决过滤图片、链接弹窗问题
如何在Node.js(Javascript)中等待,我需要暂停一段时间?
将博客搬至CSDN
C# Webbrowser 常用方法及多线程调用
全局变量名为 param1 var param1Value = webBrowser1.Document.InvokeScript("eval",new String[]{" param1"}).ToString();
C# winform WebBrowser怎么获取js中的变量的值?怎么触发js的事件?
C#的ApartmentState的属性:[STAThread]
热门文章
用C#调用Windows API向指定窗口发送按键消息
RPA技术干货 | RPA防锁屏运行技巧
C# HSSFWorkbook与XSSFWorkbook的区别和.xls和.xlsx的区别
[Emgu]判断一张图片是否在另一张图片中
C# 反射
模拟操作网页 webBrowser
用Twebbrowser做可控编辑器与MSHTML
WinForm 限制同一个进程只能打开一次
QT-UE4 三维可视化
UE4<Subsystem>的应用实践
Copyright © 2011-2022 走看看