WPF调用ActiveX控件开发、调试总结


导入导出模块是由C++开发的, 而当前的客户端用WPF开发的,需要将导入导出功能在WPF中实现一遍,可选的方案有两个:
一、重写导入导出功能
二、重用C++代码,封闭成ActiveX控件。
方案一技术上比较纯净,技术平台统一为C#后,对开发人员的要求也降低了,后期维护较便利;
方案二开发进度较快,而且相对要稳定些,主要是避免了业务的二次实现,本次采用方案二满足项目需求。
现将开发过程总结如下

封装

VS2010

步骤一 新建MFC ActiveX工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤二 添加接口函数

在这里插入图片描述在这里插入图片描述

向导生成代码

1 idl

在这里插入图片描述

2 .h

在这里插入图片描述

3 .cpp

函数映射
在这里插入图片描述

步骤三 添加事件

未在2010中找到添加事件的向导,手动添加事件如下

idl

在这里插入图片描述

.h

在这里插入图片描述

.cpp

在这里插入图片描述在这里插入图片描述

步骤四 代码改造

这部分是和业务相关的, 这里描述下。主要是移除对协议模块、配置模块的依赖,主要是部署时涉及的内容较多。

接口代码编写

完成WPF接口调用向C++逻辑的转换,主要是步骤二中接口函数的实现,与业务独立

移除对既有库的依赖

配置从WPF配置文件读取,协议模块通过事件通知至WPF,由WFP完成HTTP通信,日志模块仍延用(主要原因是改起来涉及面较广)

既有代码改造

最大的改造是:原来的导入、导出是通过窗口事件实现异步的,这在测试过程中发现ActiveX窗口事件失效,修改为线程方式实现。

步骤五 错误处理

控件注册失败

如下,注册过程相当于执行过程,注册是需要所有依赖库存在的
在这里插入图片描述

处理方式

控件对外是通过接口、事件实现交互的,建议接口一次定义完成,并且在业务代码添加前完成控件注册,注册完成后,修改为不再注册,工程设置如下图。
主要是控件的注册是需要所有依赖库存在的,本次工程开发过程中因对依赖项不太清楚,导致缺少依赖库,一直注册不成功,耗费了我和何工不少时间。而且开发过程可以专注业务代码编写。当然知道了这个原因,修改为每次注册也是可以的(本次工程开发发现这个原因后,找到了所有依赖库,也是每次都注册)
在这里插入图片描述
在这里插入图片描述

步骤六 自测

自测采用TstCon.exe,如下工程设置,

1 工程设置

在这里插入图片描述

2 启动调试

在这里插入图片描述
在这里插入图片描述

3 加载控件

在这里插入图片描述

4 执行方法

在这里插入图片描述

5 断点触发-开始调试

在这里插入图片描述在这里插入图片描述

6 接口参数设置

对于有参接口,如下设置
在这里插入图片描述

7 控件加载失败

如下,对于自测操作需要所有依赖库就绪,自测就是把控件执行起来了,这种错误基本是缺少依赖的库
在这里插入图片描述

模块集成

导出dotNet识别的接口类

在这里插入图片描述
在这里插入图片描述

2019

只能导出类型库, 在wpf程序中调用会报
灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))
在这里插入图片描述

注册控件

在这里插入图片描述

WPF工程引用

添加对AxImportExportActiveXLib的引用,如下
在这里插入图片描述

WPF源码修改

xaml文件修改

在这里插入图片描述

定义变量

在这里插入图片描述

初始化

在这里插入图片描述

接口调用

在这里插入图片描述

事件响应

在这里插入图片描述

集成测试

集成测试偏向于开发环境自测,不再赘述

系统测试

系统测试偏向于生产/测试环境自测,重点描述
系统测试时,用到的技术是远程调试,目前无法同时调试控件代码和宿主代码,因此在调试时,需要分开调试,如下说明 。

安装远程调试工具

各个版本的vs均有对应的远程调试工具

vs2010

vs2017

vs2019

环境注册控件

启动远程调试工具(以vs2019为例)

在这里插入图片描述

本地vs设置

vs2019

控件调试

对控件代码进行调试,以控件为启动工程
在这里插入图片描述

输出参数

在这里插入图片描述

远程启动宿主

这种方式会在73上启动IPS3DShell、控件,应用场景不再赘述,通过本地代码进行调试
在这里插入图片描述

本地启动宿主

这种方式会在本地启动IPS3DShell、控件,应用场景不再赘述,通过本地代码进行调试
在这里插入图片描述

宿主调试

对宿主WPF进行调试,以WPF为启动工程
在这里插入图片描述

vs2010

调试参数

在这里插入图片描述

输出参数

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值