在C#程序中使⽤ocx的⽅法
在做⼀个WPF的项⽬时(VS2008,C#),需要引⽤⼀个使⽤c++编译的ocx组件,但是运⾏的时候经常报错,⽆法使⽤其中提供的接⼝和⽅法。上⽹查了⼀下解决办法,⽅法很多,但是很多都没有奏效。最终到了⼀个⽐较有效的⽅法,下⾯就是在我的程序中能够成功使⽤的例⼦,分享⼀下。(虽然已经是去年的了—_—|||)
1、在c#⼯程⽂件中,使⽤c++等其他语⾔编译的ocx组件时,若为WinForm⼯程则不会报错,若使⽤WPF等其他类型的⼯程,在调⽤组件内的⽅法时,会报错:
灾难性故障
未处理 System.Runtime.InteropServices.COMException
Message="灾难性故障 (异常来⾃ HRESULT:0x8000FFFF (E_UNEXPECTED))"
Source="mscorlib"
ErrorCode=-2147418113
解决办法:
使⽤aximp(ActiveX控件导⼊程序),将 ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。
详见。
⼀次转换整个 ActiveX 控件类型库,并产⽣⼀组程序集,这些程序集包含在原始类型库中定义的类型的公共语⾔运⾏时元数据和控件实现。
⽣成的⽂件按照下⾯的模式命名:
COM 类型的公共语⾔运⾏时代理:progid.dll
浏览器的activex控件ActiveX 控件的 Windows 窗体代理(其中 Ax 表⽰ ActiveX):Axprogid.dll
⽅法:在cmd命令提⽰符窗⼝,输⼊如下命令:
aximp e:\
将⽣成的PIS2004Lib.dll和AxPIS2004Lib.dll引⽤到⼯程⽂件中。
2、在c#的⼯具箱内,添加COM组件,⼯具箱内显⽰不出来,⽆法将其作为控件拖拽到窗
体上。
此时需要通过ActiveX 控件的 Windows 窗体代理AxPIS2004Lib.dll,在后台代码中实例化⼀个控件,并添加到窗体中。
事先需要添加引⽤:System.Windows.Forms,WindowsFormsIntegration。
代码⽰例:
// 创建 host 对象,⽤于承载AxtiveX控件
WindowsFormsHost host = new WindowsFormsHost();
//实例化AxtiveX控件
AxPIS2004Lib.AxPIS2004 objAxPIS2004 = new AxPIS2004Lib.AxPIS2004();
//开始初始化ocx对象
objAxPIS2004.BeginInit();
objAxPIS2004.Height = 200;
objAxPIS2004.Width = 200;
// 结束初始化
objAxPIS2004.EndInit();
//将控件添加到host中
host.Child = objAxPIS2004;
// 将控件显⽰在页⾯上(其中skp_PIS2004为窗体上⼀个⽤于放置控件的容器StackPanel)
this.skp_PIS2004.Children.Add(host);
进⾏完上述步骤之后,ocx内的⽅法就可以正常使⽤了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论