wpf中使用ocx控件

这个问题困扰了两天,想了各种法子去实现,一步步终于成功了,鉴于网上搜到的好多资料并不能完美解决,特在此记录一下,希望能够帮助更多的人;

原因:

由于之前的系统是web版本的,可以通过引用Objce添加注册的classId,通过js调用对象的方法实现对于ocx控件的使用。后期版本中会将产品延伸到WPF端,在准备直接使用ocx的过程中遇到了各种问题。

解决方案:

所有的解决方案的第一步,是必须在机器上注册ocx控件,之后为确保ocx已经进入注册表,需要检查一次。

之前准备用引入webbrowser的方式引入bs端的web,通过C#调用js实现方法,但是失败了,因为每次都要允许activeX允许权限,不可行。

之后准备通过引用Com组件的方式引入注册的COM,但是引入之后也会遇到各种问题,初始化失败等错误,这些错误网上一搜一大把,但是没有完美的解决方案。

最后的实现方式是通过注册OCX控件生成AxXXXLib.dll、XXXLib.dll和AxXXXLib.cs三个文件。

注意:

需要把这三个文件全部引入工程当中,缺一不可,之前由于少引入了.cs文件又整了半天还是有问题,所以三个文件缺一不可。

之后再工程中引入System.WindowsIntegration dll文件,这个用于帮助我们引入WindowsFormHost对象;

// 创建 host 对象
 System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
 
   // 创建OCX的对象
AxXXXLib axXXX = new AxXXXLib();
 
//开始初始化ocx对象
axXXX.BeginInit();
 
host.Child = axXXX ;
// 将对象加入到面板中
dockPan.Children.Add(host);
// 结束初始化
axXXX.EndInit();

以上是实现了引入host同时将ocx控件包装到了panel控件中,dockPan是DockPanel控件。

之后就可以正常使用lib中的方法了。

 

你可能感兴趣的:(wpf中使用ocx控件)