ActiveX開發心得)

來源:互聯網
上載者:User
2008-01-06 00:54

如果你想通過C#和VB.net來做ActiveX的請,我勸你儘快打消這個念頭。.net認為ActiveX技術是過時的,所以C#和Vb.net都做不了ActiveX。C#和VB.net可以做類似的東西,但它不叫ActiveX而是叫windows控制項,前提是用戶端機器必須安裝了.net framework才能運行。但是,目前很多機器都沒有安裝.net framework,至少也要等到Vista普及得差不多的時候,ActiveX技術才可能退出曆史舞台。

那麼,我應該採用什麼技術開發ActiveX呢?可以採用VB6和C++或C++.net。由於本人不懂C++,本以為會和C#差不多,用VS建立了一個MFC ActiveX項目,開啟一看,代碼像天書一樣完全看不懂,所以決定採用VB6。雖然VB偶也不會,但是VB還是相對要簡單一些,資料也多一些。

如何用VB開發ActiveX在這裡不細說,可以參考這篇文章:ASP與ActiveX控制項互動實戰(http://blog.csdn.net/online/archive/2004/08/09/68872.aspx) ,講得非常詳細。

這裡只介紹本人遇到的幾個難題:
1.如何在ActiveX內部提交所在網頁的表單?

可以用js將form傳遞到AcitveX中去。用VB操作Html元素(dom),需要添加一個引用,方法是:工程 > 引用 > 勾選Microsoft HTML Object Library > 確定

然後在代碼中,添加一個接受用戶端form的方法:
Public HtmlForm As HTMLFormElement '記錄htmlform值
Public Sub Init(ByRef form As HTMLFormElement)
Set HtmlForm = form
End Sub

用戶端html將form傳遞到ActiveX內部去:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <script type="text/javascript">
     window.onload = function(){
       document.getElementById("KelliLogin").Init(form1);//把form傳遞到ActiveX內部中去
     }
    </script>
</head>
<body>
    <form id="form1">
    <div>
        <object classid="clsid:{1179091E-1F78-4D09-B876-B7C1ABEA4BF3}" id="KelliLogin" width="198" height="88"></object>
    </div>
    </form>
</body>
</html>

將form傳遞到ActiveX後,ActiveX就可以操作這個form了,假如使用者單擊ActiveX內部的一個按鈕,然後提交這個表單:
Private Sub Submit_Click()
    HtmlForm.Action = "test.aspx?username=123"
    ...可以像js那樣任意設定form的方法和屬性
    HtmlForm.Submit
End Sub

下面說第二個問題
2.如何標記Activex控制項為安全指令碼?

這個問題其實是第一個問題引出來的,通常ActiveX控制項在開發並註冊後,一旦在網頁中運行,IE並不認為這是一個指令碼安全的,會彈出一個IE提示:已經阻止此網站以不安全的方式使用ActiveX控制項。因此,此頁可能現實不正確。

如果不解決這個問題,我們前面的工作等於白乾。怎麼辦呢?需要修改用戶端註冊表,

添加類似於下面這樣的項(用控制項的類別識別碼 取代 {06889605-B8D0-101A-91F1-00608CEAD5B3}),使您的鍵同下列類別識別碼 相關聯:

HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4} HKEY_CLASSES_ROOT\CLSID\{06889605-B8D0-101A-91F1-00608CEAD5B3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

但是怎麼去修改用戶端機器的註冊表呢?這就需要在ActiveX控制項安裝時操作了。因此,我們需要製作一個ActiveX安裝程式,這裡我們採用Visual Studio 2005來製作安裝程式。

1.開啟vs,建立一個安裝項目
2.在方案總管視窗當中右擊項目 > 添加 > 添加檔案 > 選擇你產生的AtiveX檔案,如Hello.ocx.
3.再右擊項目,視圖 > 註冊表
   1> 按照上面的註冊表節點順序依次添加註冊表
    2> 在註冊表的最後一節中右擊 > 屬性視窗 > 設定AlwaysCreate為true,它表示此登錄機碼作為安裝項目的一分部,即使是空的。這樣設定後,在安裝的時候就會自動地修改用戶端註冊表了。
4.產生安裝程式
5.運行安裝程式
6.瀏覽包含了該ActiveX的頁面

你會發現,那個提示沒有了,而且不需要在IE中添加信任網站即可直接使用!是不是特別爽啊?

到此為止,介紹的差不多了。還有幾個問題需要研究:
1.不製作安裝包,上面的這個問題能否解決?
2.如何在AciveX中儲存資料,比如一個使用者名稱,第一次輸入後,第二次就記住它了。

有興趣的朋友可以和我一起探討或指教,謝謝!

參考資料:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_upgrading_an_existing_activex_control_to_be_used_on_the_internet.asp

http://wenhaobing.spaces.live.com/blog/cns!9d6443eb4bff9145!143.entry

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.