WPF应用ocx控件

6 篇文章 0 订阅
2 篇文章 0 订阅

前言

最近项目中需要集成电话控制功能。设计到一个USB电话录音盒的二次开发。硬件提供商提供了ocx控件。项目为C/S架构系统,客户端使用了WPF技术。所以本文重点分析,在WPF中如何引用第三方提供的ocx控件。

技术准备

ocx控件的本质

  • 可以理解为一种基于COM的用户控件
  • 不能独立运行
  • 可以有多种语言编写,包括c++,java等
  • 使用前必须注册,打包应用程序时,最好将控件放到部署目录中,然后注册
  • ActiveX是OCX 的高级形式(也许把它看作OLE的较简单形式更合适)
  • ActiveX也可能是dll类型

如何查看本机已注册的ocx控件

  • 使用绿色软件【RegDllView】可以查看本机注册的所有的dll和ocx。
  • 有些ocx可以通过【RegDllView】直接卸载,右键-》删除选定文件所有项。无法删除时,使用cmd命令行删除或者已管理员身份运行【RegDllView】。

如何注册和卸载ocx控件

  • 注册命令: regsvr32 ocx的路径

  • 注解命令: regsvr32 /u ocx的路径

  • PS:
    • 使用管理员身份登录cmd
    • 同一个ocx控件,只能注册一次,即使你使用不同的注册路径。并且注册的路径永远是第一次注册的路径

WPF中使用ocx控件

注册ocx控件

在CMD命令行了,执行注册命令。
项目中可以将OCX控件拷贝到软件exe目录下,然后编写一个bat脚本进行注册,将脚本放到ocx相同目录运行即可。

@echo off
echo 如果 Windows 7 下注册失败请右击本批处理文件选择以管理员方式运行
cd /d "%~dp0"
regsvr32 "你的名字.ocx"
pause

生成相应的dll,并在项目中引用

用管理员身份使用VS的开发人员命令提示工具,调用AxImp

虽然显示的生成目录为:c:\windows\system32。实际中,我本机的输出目录C:\Windows\SysWOW64
另外:一开始我使用的是 VS2015 X64 X86兼容工具命令行,总是报错

使用WindowsFormsHost包装控件实体

ocx控件不能在WPF中直接使用,需要使用WindowsFormsHost包装控件实体

AxUSBPHONECTRLLib.AxUsbPhoneCtrl usbPhone = new AxUSBPHONECTRLLib.AxUsbPhoneCtrl();
((System.ComponentModel.ISupportInitialize)usbPhone).BeginInit();
System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost(){Child = usbPhone};        
((System.ComponentModel.ISupportInitialize)usbPhone).EndInit();
this.grid.Children.Add(host);

使用System.ComponentModel.ISupportInitialize初始化控件实体

如果你不需要ocx的界面,只使用控件的功能,代码可以简化为:

AxUSBPHONECTRLLib.AxUsbPhoneCtrl usbPhone = new AxUSBPHONECTRLLib.AxUsbPhoneCtrl();
((System.ComponentModel.ISupportInitialize)usbPhone).BeginInit();
new System.Windows.Forms.Integration.WindowsFormsHost(){Child = usbPhone};        
((System.ComponentModel.ISupportInitialize)usbPhone).EndInit();

将ocx控件复制到exe目录中(也可以在项目中直接添加,生成项目时,会自动拷贝)

一定要将ocx控件复制到exe目录中。刚开始我没有复制ocx,总是报错:

ps

  • 项目中一定要多思考,出现问题要去分析原因。定位问题也是一种能力。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值