Agile.Net 组件式开发平台 - 驱动开发示例
首先讲一下概念,此驱动非彼驱动。在Agle.Net中我们将组件规划成两种类型,一种是基于业务的窗体组件,一种是提供扩展功能的驱动组件。
打个比方例如一般系统中需要提供身份证读卡功能,然而市面上有很多种身份证读卡器,我们无法约束客户都是用同一种读卡器,为了扩展性我们将身份证读卡功能封装为驱动组件。
那么是用不同的身份证读卡器设备,我们提供相应的封装实现就可以了。下面我来演示一个简单的驱动型组件开发例程。
Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina.net)
登陆码云平台进入项目主页(http://git.oschina.net/MuAgile/AgileDevelop)即可浏览下载源代码。
1.开发环境搭建
软件安装请参考文章《Agile.Net 组件式开发平台 - 开发环境部署》
下载项目【AgileDevelop】->【附件】中的数据库备份文件,恢复数据库到SqlServer,建议数据库命名"Agile"。
2.获取项目源代码
1. 启动 Microsoft Visual Studio,进入菜单项【工具】->【选项】->【源代码管理】-> 设置选项【当前源代码管理插件】下拉框中选择【Microsoft Git 提供程序】。
2. VS切换到团队资源管理器界面,进入菜单项【项目】->【连接到团队项目】。
3. 在本地Git存储库栏目中,输入Git项目地址,克隆"AgileDevelop"项目。
4. 关于Git的源代码管理系统的使用方法,请参考相关文档学习。
3.创建第一个驱动
1. 新建一个类库命名为"Driver.IDCard",框架版本为Net4.0,引用 Agile.Cord.dll , Agile.Entity.dll 等平台SDK库文件。
2. 新增一个驱动类,继承【Agile.Core.Addin.PluginDriverBase】驱动基类并重写"OnOpen"、"OnClose" 方法。
3. 添加【PluginAttribute】标签,添加组件描述。
namespace Driver.IDCard
{
[PluginAttribute("69715891-FBA5-428A-94B1-5C6D5C28926F", "身份证阅读驱动", "华视二代身份证读卡器阅读驱动")]
public class Driver : Agile.Core.Addin.PluginDriverBase
{
private bool _IsOpen; /// <summary>
/// 调用驱动组件并执行方法
/// </summary>
/// <param name="args">参数</param>
/// <returns></returns>
protected override object OnOpen(object args)
{
try
{
this.Init();
frmCard frm = new frmCard();
if (frm.ShowDialog() == DialogResult.OK)
return frm.IDCard.ToClone();
else
return null;
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.OnClose();
}
} /// <summary>
/// 关闭(卸载)驱动组件
/// </summary>
/// <returns></returns>
protected override void OnClose()
{
try
{
SDK.CVR_CloseComm();
}
catch { }
} /// <summary>
/// 初始化设备连接
/// </summary>
/// <returns></returns>
private void Init()
{
if (_IsOpen == false)
{
int ret = -1;
for (int port = 1001; port <= 1016; port++)
{
ret = SDK.CVR_InitComm(port);
if (ret == 1) break;
}
if (ret != 1)
{
for (int port = 1; port <= 4; port++)
{
ret = SDK.CVR_InitComm(port);
if (ret == 1) break;
}
} if (ret == 1)
{
_IsOpen = true;
return;
}
else if (ret == 0)
throw new Exception("读卡器连接失败!动态库加载异常。");
else if (ret == 2)
throw new Exception("读卡器连接失败!端口开启异常。");
else
throw new Exception("读卡器连接失败!发生未知异常。");
}
}
}
}
4.至此一个简单的平台驱动组件已经开发完成了,下面咱们来调用试试看。
private void btn_NoneCard_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//通过以下四种方式调用驱动组件
//方式一
//var driver = Controller.GetIPlugin(Guid.Parse("69715891-FBA5-428A-94B1-5C6D5C28926F")) as IPluginDriver;
//方式二
//var driver = Controller.GetIPlugin("Driver.NoneCard.dll", "Driver.NoneCard.Driver", "Drivers") as IPluginDri
//方式三
//var driver = Agile.Library.Controller.GetIPlugin("Driver.NoneCard.Driver.Driver") as IPluginDriver;
//方式四
var driver = Agile.Library.Controller.GetIPlugin<Driver.IDCard.Driver>() as IPluginDriver;
IDCard entity = driver.Open();
}

OK 运行成功,那么咱们第一个驱动组件【身份证阅读驱动】已经开发好了,Agile.Net开发管理平台中包含本案例完整源代码。
Agile.Net 组件式开发平台 - 驱动开发示例的更多相关文章
- Agile.Net 组件式开发平台 - 组件开发示例
所谓组件式开发平台,它所有的功能模块都是以组件的形式扩展的,下面我来演示一个简单的组件开发例程. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina. ...
- Agile.Net 组件式开发平台 - 平台系统介绍
平台介绍 Agile.Net 组件式开发平台是一款针对企业级产品的开发框架,平台架构基于SOA服务体系,多层组件式架构打造.平台提供企业应用开发所需的诸如ORM.IOC.WCF.EBS.SOA等分布式 ...
- Agile.Net 组件式开发平台 - 服务开发示例
在上一篇文章中已经讲解了组件的开发,这篇文章讲解平台服务开发. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina.net) 登陆码云平台进入项目主页 ...
- 嵌入式开发平台-iTOP-4418开发板
详情转自:http://topeetboard.com S5P4418核心板可以无缝支持核心系统S5P6818,并保持底板设计不变,将兼顾更高端 的应用领域,为项目和产品提供更好的灵活性以及可伸缩性. ...
- Agile.Net 组件式开发平台 - 内核管理组件
敏捷开发体系 软件构件技术:所谓软件构件化,就是要让软件开发像机械制造工业一样,可以用各种标准和非标准的零件来进行组装.软件的构件化和集成技术的目标是:软件系统可以由不同厂商提供的,用不同语言开发 ...
- Agile.Net 组件式开发平台 - 数据报表组件
Agile.Report.dll 文件为平台数据报表支持库,基于FasstReport.Net扩展重写,提供了非常强大的自定义报表的功能使开发者为应用程序快速有效地生成报表.报表类库提供了创建报表所需 ...
- Agile.Net 组件式开发平台 - 系统文档中心
Agile.Debgu.exe 文件为平台文档中心应用程序,该程序集成了数据库结构文档查询.数据库结构文档浏览.实时系统日志监控等功能. 数据库结构文档浏览 数据库结构文档查询 系统平台日志监控
- bsp开发之驱动开发
驱动程序是可以管理虚拟设备或者物理设备,协议,服务等得软件模块,操作系统仅仅有通过驱动程序才干訪问硬件.针对windows ce开发设备驱动.就是通过platform builder创建一个新的平台, ...
- 开发指南专题4:JEECG高速微云开发平台--JEECG开发环境的搭建
开发指南专题4:JEECG微云高速开发平台开发环境搭建 1. JEECG开发环境搭建 JEECG推荐的开发环境为Myeclipse8.5/Eclipse3.7+JDK1.6+Tomcat6.0 1.1 ...
随机推荐
- fiddler响应报文的headers属性详解
fiddler响应报文的headers属性详解 (1)Cache头域 1. Cache-Control 在请求报文已经说过了,用于设置缓存的属性,浏览内容不被缓存. 2. Data 生成消息的具体时间 ...
- STM32 时钟配置的坑
今天在调试公司的一款产品的时候发现8M的晶振用完了,于是找了一个16M的替代 坑爹的就在这里,明明已经把时钟按照时钟树配置好了,但是串口等外设一直无法正常工作 折腾了一下午,终于发现这位老兄的文章ht ...
- swig与python
当你觉得python慢的时候,当你的c/c++代码难以用在python上的时候,你可能会注意这篇文章.swig是一个可以把c/c++代码封装为python库的工具.(本文封装为python3的库) 文 ...
- 四则运算_EX
在原有四则运算基础上,除整数以外要支持真分数运算(验证正确性) 一次出的题避免相互重复 可定制出题数目 #include <stdio.h>#include <stdlib.h> ...
- 状压搜索 洛谷T47092 作业
TYM 有 nn 本作业,编号为 1,\dots,n1,…,n. 由于 \mathrm{TYM}TYM 很喜欢偷懒,而且不喜欢消耗脑细胞,所以他选择跳着完成这 nn 本作业.此外,如果将做作业的顺序转 ...
- oracle 建立一个视图,然后授权其他用户访问
grant select on V_LIC_ENTRY_HZ_STATUS to ielicr2013; create or replace view dept_sum_vw (name,minsal ...
- 聊聊WS-Federation
本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...
- Windows运行机理——API与SDK
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以搬运加以整理. 首先 API:Application Programmaing Interf ...
- 负数取余/整除,Python和C语言的不同
总结一句:Python中负数整除,是向负无穷取整,所以导致负数取余不对 在数学公式中,两种语言的表示算法都是一样的,都是: r=a-n*[a/n] 以上,r是余数,a是被除数,n是除数. 唯一不同点, ...
- [Clr via C#读书笔记]Cp8方法
Cp8方法 构造器 作用就是初始化所有成员字段:.ctor:派生类和基类都有自己的构造函数.默认有一个无参数的构造函数,值字段初始化为0,引用字段初始化为null:可以有多个构造器: 值类型的初始化其 ...