最近項目中須要集成電話控制功能。設計到一個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