silverlight那點事:一,silverlight調用ocx控件

由於項目需求 silverlight需要和 c++做的ocx控件做交互,又因爲silverlight不能直接調用ocx控件,於是就考慮到了 javacritp充當中間者。於是一個解決方案就出來了:

Silverlight 與javascript交互,javascript與ocx控件交互,他們中間的數據傳輸採用 string類型的 xml數據流

在實踐過程中遇到以下實際問題:

1>   在承載silverlight應用程序的頁面,添加ocx控件的引用的標籤必須有一個開始標誌,和一個結束標誌,(否則會出現,註冊頁面只能識別隨意的一個ocx控件)classid 爲這個ocx註冊時的guid

        <div id="Eye"><object id="EyeActiveX" classid="CLSID:49337F3E-983E-4D01-9D1C-9B9CA8F021AE"

            style="display: none;"> </object> </div>

 相應的javascript腳本:   

 <script language="javascript" type="text/jscript"  defer="defer">

        function checkEye(strXml) { //獲取視力信息
          try {
            var obj = document.getElementById("EyeActiveX");
            var returnValue = obj.GatherEyeValue(strXml);
            return (returnValue)
            }
          catch (e) {
              alert("Error");
                     }
           }
 </script>

對應的silverlight頁面語句:

string strXml=“......." ;//省略

object result  = HtmlPage.Window.Invoke(“checkEye”, strXml); //以這個方法爲例,我們返回的結果爲一個string類型的xml字符串

拿到 result  我們就可以對他進行處理了

2>  在註冊ocx控件時,由於ocx用的動態鏈接庫的版本不一樣,造成ocx控件的功能 不能成功的在裸機上運行,於是用到了以下兩個 工具:

      1.   vcredist_x86.exe是針對於不同CPU所出的優化補丁執行程序,是一種基於C++的軟件需要的庫文件,有些程序在安裝相應的vcredist文件環境下才能運行

      2.   depends.exe 是檢測ocx等裏面動態鏈接庫的依賴關係。這裏面如果ocx缺少的dll文件,都會顯示error,作爲檢測人員的你,去網上下載相應的dll文件即可

3>    在運行承載silverlight的頁面上,首次加載所有的ocx控件,ie8安全默認的級別使ocx控件無法加載,這個時候最 傻的 辦法就是將每個客戶機的瀏覽器的安全級別降至最低,(不過有實力的公司 可以將ocx進行安全認證)

備註:  vcredist_x86.exe,depends.exe 可以去網上下載,如果沒找到,在我的上傳文件裏可以找到

由於個人能力有限,有些表達或者見解有誤,請多多指出,技術上共同提高。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章