最近项目中须要集成电话控制功能。设计到一个USB电话录音盒的二次开发。硬件提供商提供了ocx控件。项目为C/S架构系统,客户端使用了WPF技术。因此本文重点分析,在WPF中如何引用第三方提供的ocx控件。java
注册命令: regsvr32 ocx的路径c++
同一个ocx控件,只能注册一次,即便你使用不一样的注册路径。而且注册的路径永远是第一次注册的路径windows
在CMD命令行了,执行注册命令。
项目中能够将OCX控件拷贝到软件exe目录下,而后编写一个bat脚本进行注册,将脚本放到ocx相同目录运行便可。架构
@echo off echo 若是 Windows 7 下注册失败请右击本批处理文件选择以管理员方式运行 cd /d "%~dp0" regsvr32 "你的名字.ocx" pause
用管理员身份使用VS的开发人员命令提示工具,调用AxImp工具
虽然显示的生成目录为:c:\windows\system32。实际中,我本机的输出目录C:\Windows\SysWOW64
另外:一开始我使用的是 VS2015 X64 X86兼容工具命令行,老是报错
this
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);
若是你不须要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,老是报错:
code