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