zoukankan
html css js c++ java
开发c#插件步骤
开发c#插件步骤
//
1 定义插件接口,将其编译成 dll,例如:
using
System;
namespace
PluginInterface
{
public
interface
IShow
{
string
Show() ;
}
}
//
2 编写插件. 新建dll工程,并引用第一步做的dll插件,实现其接口,例如:
namespace
PluginA
{
public
class
PluginA : PluginInterface.IShow
{
public
string
Show()
{
return
"
I am plugin A
"
;
}
}
}
收集程序集:
//
3. 在指定目录下寻找Dll文件
private
void
frmMain_Load(
object
sender, System.EventArgs e)
{
//
获取Plugins目录中所有的DLL文件,并保存在combo中
try
{
string
path
=
Application.StartupPath ;
path
=
System.IO.Path.Combine(path,
"
Plugins
"
) ;
foreach
(
string
file
in
System.IO.Directory.GetFiles(path,
"
*.dll
"
))
{
this
.cmbPlugins.Items.Add(file) ;
}
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message ) ;
}
}
使用插件
private
void
btnExecute_Click(
object
sender, System.EventArgs e)
{
try
{
//
1. 获得 文件名称
string
asmFile
=
this
.cmbPlugins.Text ;
string
asmName
=
System.IO.Path.GetFileNameWithoutExtension(asmFile) ;
if
( asmFile
!=
string
.Empty )
{
//
2. 利用反射,构造DLL文件的实例
System.Reflection.Assembly asm
=
System.Reflection.Assembly.LoadFrom(asmFile) ;
//
3. 利用反射,从程序集(DLL)中,提取类,并把此类实例化
PluginInterface.IShow iShow
=
(PluginInterface.IShow)
System.Activator.CreateInstance(asm.GetType(asmName
+
"
Namespace.
"
+
asmName
+
"
Class
"
)) ;
//
4. 在主程序中使用这个类的实例
this
.label2.Text
=
iShow.Show();
}
}
catch
( Exception ex )
{
MessageBox.Show(ex.Message ) ;
}
}
查看全文
相关阅读:
C++中的内存分配
进程间通信(IPC)
一段重新开始的旅程
状态压缩模版3:地雷
状态压缩模版2:选数
状态压缩模版1:滑块
后缀数组练习4:Life Forms
后缀数组练习3:连续重复子串
后缀数组练习2:可重叠的k次最长重复子串
后缀数组练习1:不可重叠最长重复子串
原文地址:https://www.cnblogs.com/tonybinlj/p/1297904.html
最新文章
类型、思路的一些总结
无聊开始水题
测试114 概率期望,单调栈,树上倍增
测试113
测试111,T2卡崩
一类线段树分治。
测试110
测试109
关于复杂度设计
测试107:AK
热门文章
嘤嘤嘤多校训练记录
需要刷/补的题
C++11 的新特性
Linux服务端最大并发数是多少?
湖南2020多校对抗赛round3 CERC2014
湖南2020多校对抗赛round1 NWERC2014
树形DP从入门到入土
C++ 中的单例模式
常见排序总结
手写一个shared_ptr智能指针
Copyright © 2011-2022 走看看