好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

在C#程序中使用ocx的方法

在C#程序中使用ocx的方法

在C#程序中使用ocx的方法

  在做一个WPF的项目时(VS2008,C#),需要引用一个使用c++编译的ocx组件,但是运行的时候经常报错,无法使用其中提供的接口和方法。上网查了一下解决办法,方法很多,但是很多都没有奏效。最终找到了一个比较有效的方法,下面就是在我的程序中能够成功使用的例子,分享一下。(虽然已经是去年的了—_—|||)

1、在c#工程文件中,使用c++等其他语言编译的ocx组件时,若为WinForm工程则不会报错,若使用WPF等其他类型的工程,在调用组件内的方法时,会报错:

解决办法:
    使用aximp(ActiveX控件导入程序),将 ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。
详见 http://msdn.microsoft.com/zh-cn/library/8ccdh774.aspx 。

  Aximp.exe 一次转换整个 ActiveX 控件类型库,并产生一组程序集,这些程序集包含在原始类型库中定义的类型的公共语言运行时元数据和控件实现。 
生成的文件按照下面的模式命名:

COM 类型的公共语言运行时代理:progid.dll

ActiveX 控件的 Windows 窗体代理(其中 Ax 表示 ActiveX):Axprogid.dll

方法:在cmd命令提示符窗口,输入如下命令:
   aximp e:\PIS2004.ocx

将生成的PIS2004Lib.dll和AxPIS2004Lib.dll引用到工程文件中。

2、在c#的工具箱内,添加COM组件PIS2004.ocx,工具箱内显示不出来,无法将其作为控件拖拽到窗体上。
此时需要通过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内的方法就可以正常使用了。

 

 

分类:  C#

标签:  C# ocx 组件

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于在C#程序中使用ocx的方法的详细内容...

  阅读:49次