前言

最近项目中需要集成电话控制功能。设计到一个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

  • 项目中一定要多思考,出现问题要去分析原因。定位问题也是一种能力。

WPF应用ocx控件相关推荐

  1. WPF调用OCX控件

    今天同事遇到一个难题.在WPF里面使用OCX控件.这个控件在WINFORM里面像使用其它控件一样引用就行了.可是WPF里面不行.经过一翻查阅,在http://msdn.microsoft.com/zh ...

  2. WPF引入OCX控件

    1.先注册OCX控件:(有的把OCX 控件封装到EXE文件中,安装即可): 2.打开vs,新建一个winform程序,在工具箱中添加COM组件(把更才注册的OCX控件)引用进来,这是就会看到当前win ...

  3. 在C#开发WPF桌面应用程序调用OCX控件

    公司需要开发开发C#的WPF桌面应用程序演示软件,该软件调用高拍仪设备使用的的两个x86版本的OCX组件用于显示和控制高拍仪设备. 一.开发环境: 操作系统: Windows 10 企业版操作系统 开 ...

  4. VC++ OCX 控件注册

    转自:http://www.cctry.com/thread-5334-1-1.html 方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例: regs ...

  5. WPF查找子控件和父控件方法

    原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...

  6. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...

  7. Java调用ocx控件以及dll

    2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...

  8. WPF 动画显示控件

    原文:WPF 动画显示控件 当我们要显示一个控件的时候,不仅仅要显示这个控件,还要有动画的效果. 主要用到了DoubleAnimation类. public static void ShowAnima ...

  9. WPF的Timer控件的使用

    原文:WPF的Timer控件的使用 通过System.Threaing.Timer控件来实现"初始加载页面时为DataGrid的模版列赋初始值" System.Threaing.T ...

最新文章

  1. Spring Cloud剖析--云平台技术栈17
  2. 蔚来一面:用Object做hashMap的Key时需要做什么?
  3. i/o传输数据打印换行符的方法
  4. 下载人脸认证助手_关于微信人脸解封验证失败方法
  5. mysql根据条件不同字段值_MYSQL 根据条件取不同字段统计内容
  6. 线程的生命周期 和 线程的通讯
  7. java timer 序列化_编程达人 应用层timer_如何序列化timer
  8. [Spring+Hibernate系列]2.项目介绍与首个MVC实例
  9. mysql的数据层基类_C# 基于MySQL的数据层基类(MySQLHelper)
  10. 通过SQL语句来备份,还原数据库
  11. Google 出品的 Java 编码规范,强烈推荐,权威又科学!
  12. localhost 127.0.0.1 本机IP
  13. 使用 PotPlayer 搭配 SVP 4 播放60帧电影
  14. C#获取注册表指定键值操作
  15. 《Maven实战》 读书笔记
  16. Bootstrap 导航元素( tab导航)标签页
  17. java es 如何查询_使用elasticsearch的java-api进行查询
  18. 操作系统原理实验(3):操作系统的基石中断与异常
  19. cf网络原因服务器无响应,CF老出现网络出现异常,与服务器断开
  20. sparksteaming的idea配置及入门程序

热门文章

  1. 信息学奥赛之初赛 第1轮 讲解(01-08课)
  2. 【Unity 3D】常见API的讲解以及在C#脚本中的执行(附源码)
  3. 加速FFmpeg转码
  4. 安装最新的文泉驿字体[z]
  5. win10下anaconda+spyder+keras 下载与设置大全(汉化、环境变量设置、DPI缩放等)
  6. 内网后渗透,生成免杀后门!!
  7. 手机邮箱接收邮件服务器如何,手机电子邮箱接收和发送的服务器地址是多少?...
  8. PMP认证需要多少钱?
  9. 5G NR - RACH学习笔记1 - Overview
  10. AD 2020 入门教程