C#调用OCX控件的常用方法


C#调用OCX控件的常用方法[转]

 
 小伙伴们在使用ICP提供的各种能力进行集成开发时常常会遇到一些技术上的困扰,例如ICP中很多接口是通过OCX控件的方式提供的,如何调用这些接口,就成了一个不大不小的问题,毕竟开发指南上可没这些内容啊~别着急,今天我就给大家介绍一下C#中调用OCX接口的常用方法。^_^y
原文链接  http://developer.huawei.com/ict/forum/thread-21687.html
开发环境:win7企业版,vs2010
控件:以voice.ocx为例

一、Winform工程中调用OCX控件

        1.使用regsvr32控制台命令注册控件;

                1.1 打开控制台,进入控件存放路径

                1.2 输入控制台命令:regsvr32 voice.ocx

                1.3回车,创建成功

        2.项目中创建winform窗体;

        3. 项目添加对ocx控件的引用;

                
               

               
 

        4. 将对应 .ocx 文件拖动至工具箱,结果如下;
               
                        

        5. 将该控件拖放至窗体上;
             
                        

        6. 调用控件中的方法( axVoice1 为上一步拖入控件的 ”Name” 属性值)。
              
                        

二、类库工程中调用 OCX 控件

        1. .ocx 文件拷贝到 vs2010 安装目录下 VC 文件夹中;

        2. 使用 regsvr32 控制台命令注册控件;

                2.1  打开控制台,进入控件存放路径

                2.2  输入控制台命令: regsvr32 voice.ocx

                2.3 回车,创建成功

        3. 编译 ocx 文件

                3.1  打开 Visual Studio  命令提示 (2010)

                3.2  输入命令 aximp Voice.ocx ,生成两个 dll 文件
             
                

        4. 将上一步生成的 dll 文件拷贝到项目中,项目引用 Ax 前缀的文件;
             
                

        5. 调用控件中的方法。
       
            
版权声明:本博客所有图片、文字等版权属于虫子樱桃所有,未经许可谢绝任何形式的复制和传播。博客的图片和代码部分来自网络,本站均已注明来源和作者原来的声明。如有侵权,请使用本站联系方式告诉,我们将会在第一时间做出处理。
 
 
 

在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 窗体控件。
详见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内的方法就可以正常使用了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM