WOSA的C#实践
更新时间:2023-10-07 05:35:01 阅读量: 综合文库 文档下载
- 我撒的菜籽容易出苗了推荐度:
- 相关推荐
WOSA/XFS的C#实践
前言
金融服务扩展的一个关键内容就是对一组API、一组相应的SPI和支持服务的定义,使金融服务能够使用以Windows为基础的应用程序。
下面是典型的API使用方案。本例以打印表格所用的函数举例说明。
●? StartUp(启动,将应用程序连接到XFS管理器,包括版本协商) ●? Open(打开,在应用程序和服务提供程序间建立会话)
●? Register(注册,指定应用程序应该从服务提供程序收到的消息) ●? Lock(锁定,通过应用程序获得对服务的唯一访问) ●? 多个Execute(执行)函数,传递一个或多个具体命令: ●? Print_Form(打印表格) ●? 等等
●UnLock(解锁,通过应用程序获得对服务的唯一访问) ●Deregister(注销,指定应用程序不再从服务提供程序收到消息) ●Close(关闭,结束应用程序和服务提供程序间的会话) ●CleanUp(清除,断开应用程序和XFS管理器的连接)
使用C#开发WOSA过程中。 Startup:
uint dwVersion = 0x0B020003;
var lpwfVersion = newWFSVERSION();
int result = _dllwrapper.WFSStartUp(dwVersion, ref lpwfVersion); Open:
_dllwrapper.WFSCreateAppHandle(ref app); uint dwVersion = 0x0b020003;
WFSVERSION srvcVersion = newWFSVERSION(); WFSVERSION spiVersion = newWFSVERSION();
var hr = _dllwrapper.WFSOpen(pszName, app, appName, WFSConstants.WFS_TRACE_ALL_API|WFSConstants.WFS_TRACE_MGR, WFSConstants.WFS_INDEFINITE_WAIT, dwVersion, ref srvcVersion, ref spiVersion, ref service);
其中,pszName,服务名称需和SP方确定具体名称
Register:
var pinpadRegister = _dllwrapper.WFSRegister(pinpadService, WFSConstants.EXECUTE_EVENTS | WFSConstants.SERVICE_EVENTS | WFSConstants.USER_EVENTS | WFSConstants.SYSTEM_EVENTS,
mainPtr); LogErr(pinpadRegister,\);
var cardReader = _dllwrapper.WFSRegister(cardService,
WFSConstants.EXECUTE_EVENTS | WFSConstants.SERVICE_EVENTS , mainPtr); LogErr(cardReader,\);
Excute:
WFSPINGETPIN getPin= newWFSPINGETPIN(); getPin.bAutoEnd = true; getPin.cEcho = '*';
getPin.ulActiveFDKs = 0x00000000; getPin.ulActiveKeys = 0x00001FFF; getPin.ulTerminateFDKs = 0x00000000; getPin.ulTerminateKeys = 0x00000400; getPin.usMaxLen = 6; getPin.usMinLen = 4;
int size = Marshal.SizeOf(getPin);
IntPtr buffer = Marshal.AllocHGlobal(size); try
{
Marshal.StructureToPtr(getPin,buffer,false);
var hr= _dllwrapper.WFSAsyncExecute(pinpadService, PinConstants.WFS_CMD_PIN_GET_PIN, buffer, WFSConstants.WFS_INDEFINITE_WAIT,
mainPtr, ref getPinRequestId); LogErr(hr, \); }
执行命令时,buffer为命令的参数,应为指针类型,可使用Marshal来处理生成。
WPF接收XFS Manager发的消息,并根据消息来处理
privatevoid Window_Loaded(object sender, RoutedEventArgs e) {
mainPtr = newWindowInteropHelper(this).Handle; HwndSource hs = HwndSource.FromHwnd(mainPtr);
hs.AddHook(newHwndSourceHook(TestHwndSourceHook)); }
privateIntPtr TestHwndSourceHook(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, refbool handled) { switch (msg) {
caseWFSConstants.WFS_EXECUTE_EVENT:
this.Dispatcher.Invoke((Action)(() => { Log(\); try
{
WFSRESULT result = (WFSRESULT)Marshal.PtrToStructure(lparam, typeof(WFSRESULT));
if (result.RequestID==getPinRequestId) {
WFSPINKEY key = (WFSPINKEY) Marshal.PtrToStructure(result.lpBuffer, typeof (WFSPINKEY));
Log(string.Format(\{0},complete:{1}\,key.ulDigit,key.wCompletion)); if (key.ulDigit==0x2a) {
tb_PassWord.Text += \; }
if (key.ulDigit==PinConstants.WFS_PIN_FK_BACKSPACE) {
}
if (key.ulDigit==PinConstants.WFS_PIN_FK_CANCEL)
{
_dllwrapper.WFSCancelAsyncRequest(pinpadService, getPinRequestId);
} }
} catch (Exception e) {
Log(e.Message);
}
})); break;
caseWFSConstants.WFS_USER_EVENT:
this.Dispatcher.Invoke((Action)(() => { Log(\); })); break;
caseWFSConstants.WFS_SERVICE_EVENT:
this.Dispatcher.Invoke((Action)(() => { Log(\); })); break;
caseWFSConstants.SYSTEM_EVENTS:
this.Dispatcher.Invoke((Action)(() => { Log(\); })); break;
}
returnIntPtr.Zero; }
要点:
所有的结构体,因在C头文件中定义为#pragmapack(push,1)
应使用LayoutKind.Explicit来标记 并使用FieldOffset来设置开始位置
正在阅读:
WOSA的C#实践10-07
压力管道设计培训-1基础知识04-21
高考常考英语短语 高考英语作文加分短语04-04
六五普法试题库(卫生技术人员)05-28
个人思想品德评定表自我鉴定范文10篇_个人自我鉴定04-04
国际结算题库05-02
01.传输专业试题库04-30
2007年造价员《工程造价基础知识》串讲 - secret03-20
热设计的基础知识与规范 - 图文09-12
鸟类检索表11-02
- 必修一物理寒假作业
- 2019-201X年5月大学生入党积极分子思想汇报-word范文模板(3页)
- 药物分析习题五
- 重拾应用意识 体会数学价值(沈建军)
- 2017全国高校辅导员结构化面试题集及参考答案
- 广东徐闻县实验中学2014届高三第二次月测地理试题
- 今天你共鸣了么?
- 2018-2019正能量读后感1000字-推荐word版(6页)
- 2018年中国截切型盖板针布行业专题研究分析报告目录
- 中国移动业务处理流程大全
- 公文写作常用词汇和句子集锦2016
- ARM课程设计说明书
- 教师资格证教育学论文
- 中考试卷分析
- 环境监测试卷(五)
- 党风廉政建设广播稿1
- 快速制作香香宫煮麻辣烫教程
- 《国际金融学》习题
- 文明施工保障措施方案
- 春兰维修资料故障代码
- C#
- 实践
- WOSA
- 大学毕业实习自我鉴定总结3000字
- 宝马刷机
- 高中化学期中考试卷(难度系数:0.55-0.41)-20150605
- 安徽旺安包装有限公司年产1000万条编织袋生产线建设项目全本公示 - 图文
- 2018年人教版二年级下册易错字易错拼音题集
- 银行业金融机构重要信息系统投产及变更管理办法
- 燃运部内部管理制度汇编 - 图文
- 数控机床的基本组成以及发展前景 - 图文
- 对“如何创建学习型社区及社区教育师资队伍建设”的思考和探索
- 绿色校园环保标语
- 《土壤学》试题集--整理版(附答案~) - 图文
- 铸轧厂检验规程
- 电工与电子技术基础期中考试B卷
- 初中一年级数学竞赛题(一)
- 中山市喜汇名苑可行性研究报告-广州中撰咨询
- 现代企业管理试题及标答B
- “提高综合素质,争做文明员工”主题教育学习材料之九
- 宁波市市级科技项目经费管理暂行办法(甬财政教488、甬科计136号 2002年8月25日)
- 国家规定装修工程设计收费标准
- dsp实验心得体会