[WPF]WPF项目调用ocx控件

13 篇文章 0 订阅

基于WPF调用ocx,如下(以高拍仪 EScannerCtrl.ocx 为例):

一.注册ocx控件

1.1)输入regsvr32命令注册ocx控件(需要管理员权限),如下所示:

注册指令:regsvr32 EScannerCtrl.ocx
卸载指令:regsvr32 EScannerCtrl.ocx


二.生成Ocx的调用库与调用类

注册完成之后需要生成Ocx的调用库( WinForm 能够使用的 AxHost 控件),方式有以下两种:

1.使用aximp.exe工具:

参考链接:Aximp.exe (Windows Forms ActiveX Control Importer)

1.1)打开VisualStudio中的命令行(x86版本);

1.2)输入以下指令:

aximp ocx的路径 /source  (这里加入/source主要是为了生成c#的调用类,用的时候将此类加入到vs工程中即可)

aximp EScannerCtrl.ocx /source

1.3)运行后将会生成AxEScannerCtrlLib.dll、EScannerCtrlLib.dll和AxEScannerCtrlLib.cs三个文件。

2.通过Winform项目:

2.1)打开VisualStudio,新建一个winform项目;

2.2)在工具箱中添加COM组件(EScannerCtrl.ocx)引用进来;

2.3)当前winform项目的引用会多出2个DLL(AxEScannerCtrlLib.dll、EScannerCtrlLib.dll),若没出现,则在窗体拖拉一下工具箱中新添加的Ocx控件;

2.4)把Debug文件夹下的2个DLL复制出来(默认在Debug文件夹下);


三.在WPF项目中引用

在WPF项目中引用AxEScannerCtrlLib.dll、EScannerCtrlLib.dll;方式如下:

1.右击项目-<Add Reference;

2.选择刚生成的AxEScannerCtrlLib.dll、EScannerCtrlLib.dll;

3.点击"OK"。


四.Ocx的使用

Ocx可以通过前台跟后台两种方式使用,如下:

1)后台动态添加:

public MainWindow()
{
    InitializeComponent();

    // 创建 host 对象
    var host = new System.Windows.Forms.Integration.WindowsFormsHost();

   var ax = new AxEScannerCtrlLib();// 创建OCX的对象
   ((System.ComponentModel.ISupportInitialize)ax).BeginInit();//开始初始化ocx对象

   host.Child = ax ;
   // 将对象加入到面板中
   dockPan.Children.Add(host);

   ((System.ComponentModel.ISupportInitialize)ax).EndInit();// 结束初始化

   //.......(后续对Ocx控件的操作)
}

2)前台添加:

<Window x:Class="HostingAxInWpfWithXaml.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:axescannerctrllib="clr-namespace:AxEScannerCtrlLib;assembly=AxInterop.EScannerCtrlLib" >
  <Grid Name="grid1">
    <WindowsFormsHost>
         <axescannerctrllib:AxEScannerCtrl x:Name="EScanner"/>
    </WindowsFormsHost>
  </Grid>
</Window>

 


五.引用OCX可能遇到的一些问题

问题1:没有注册类 (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG));

解决1:可能未注册Ocx控件,重新注册;

解决2:该Ocx控件可能只支持X86,把项目的生成更改为X86平台;

问题2:引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法;

解决1:Ocx需要寄托于WindowsFormsHost中,用WindowsFormsHost包括Ocx控件即可;


参考资料:

1. http://msdn.microsoft.com/en-us/library/8ccdh774(VS.80).aspx

2. http://blogs.msdn.com/b/jijia/archive/2007/06/07/wpf-flash-activex.aspx

3.https://docs.microsoft.com/zh-cn/previous-versions/ms748870(v=vs.100)?redirectedfrom=MSDN

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值