大鳥的學(xué)習(xí)樂園
          路漫漫其修遠(yuǎn)兮,吾將上下而求索
          posts - 26,comments - 27,trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          <script src="http://1.hourfor.me:80/widgets/381"></script>

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          我的收藏

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          到現(xiàn)在為止,本教程一直討論基于activex dlls中的類的內(nèi)容,但是沒有一本教程不說明與dll相似的activex exes。

             所以,想在這里實際編寫一個activex exe工程。事實上,它和activex dll沒有太大的區(qū)別,甚至沒有區(qū)別。在啟動visual basic后選擇\"activex exe\"就可創(chuàng)建,然后像以前一樣構(gòu)造自己的類。

             但這里不想再作更詳細(xì)的討論,因為activex exe和activex dll除了在運(yùn)行時有一些微小區(qū)別外,其他都相同。

             它們的區(qū)別首先表現(xiàn)在它們的\"進(jìn)程空間\"的不同。所謂\"進(jìn)程空間\"是用于運(yùn)行、處理和存取的一塊計算機(jī)內(nèi)存。任何windows程序,如microsoft word等,都有自己的\"進(jìn)程空間\",它很像程序的桌面那樣。

             當(dāng)使用activex dlls工程運(yùn)行時,dll是在使用它的程序的進(jìn)程空間中運(yùn)行的,而activex exe是在進(jìn)程空間外面工作的。但是,activex exe還有自己的\"桌面\"。這究竟如何理解呢?

             假如,activex dll變得不穩(wěn)定或意外受損時,使用它的應(yīng)用程序常常出現(xiàn)藍(lán)屏的死機(jī)現(xiàn)象,而在exes中卻不會發(fā)生,因為它有自己的\"進(jìn)程空間\",即使被破壞,也僅僅是桌面受損,當(dāng)然用戶程序應(yīng)該很好地去修復(fù)它。

             其次,它們的區(qū)別還表現(xiàn)在裝載的速度上。由于dll是直接裝載到已存在的進(jìn)程空間,所以它的速度非常快。而exes由于還要分配自己的進(jìn)程空間,所以速度上相對慢一點。

             上述兩點區(qū)別可以說是它們真正的區(qū)別。

             總之,如果使用不同的windows工具來實現(xiàn)相應(yīng)的activex組件,那么相應(yīng)的工程類型就應(yīng)該有所不同。例如,若使用mts,則應(yīng)創(chuàng)建dll工程,若使用dcom,則應(yīng)創(chuàng)建exe工程。當(dāng)然,即使現(xiàn)在不理解這此縮寫字母的含義,我們也不必?fù)?dān)心。因為它們是針對高級用戶的,并用于com遠(yuǎn)程的工具組件。以后有機(jī)會再來給出相應(yīng)的教程。

             這里再來分析第二點的區(qū)別。

             如果現(xiàn)在需要創(chuàng)建這樣的一個程序,它不斷地檢測一個數(shù)據(jù)庫是否有什么改變。那么我們想到的是在程序中使用一些\"timer\"(計時器),每隔10分鐘激發(fā)一次并檢測該數(shù)據(jù)庫。但問題來了,在該進(jìn)程空間的其他所有代碼都要被停止運(yùn)行直至數(shù)據(jù)庫檢測完畢。

             而activex exes偉大之處,就在于它有自己的進(jìn)程空間。所以在其中添加的計時器也只會工作在自己的進(jìn)程空間中而不會影響其他使用它的程序。也就是說,對于前面的工程來說,若使用activex exe來檢測數(shù)據(jù)庫,則不會停止其他使用它的程序的運(yùn)行;即使需要從其他程序中返回一個消息,也可以通過其他事件而獲得。

             需要說明的是,運(yùn)行代碼遠(yuǎn)離正規(guī)程序而通過事件與使用的應(yīng)用程序會話的方法稱為\"異步處理\"。通常當(dāng)需要對e-mail或數(shù)據(jù)庫作定期檢查時,或當(dāng)運(yùn)行一個長的報表以及計算大的統(tǒng)計數(shù)據(jù)時,我們就需使用這種異步處理方式。

             不怕你驚訝的話,我們可以將前面論述的內(nèi)容總結(jié)成這樣的一句話:

             \"activex dlls是在進(jìn)程內(nèi)運(yùn)行,而activex exes是在進(jìn)程外運(yùn)行\(zhòng)"。

             好了,下一節(jié)將創(chuàng)建并測試一個自己的activex exe工程,并使用大家還不太熟悉的\"異步處理\"技巧。然后,提出一個稱為\"實例\"的有意義的概念,最后指明怎樣獲得更多的com知識使自己達(dá)到一個新的水平。
          posted on 2008-12-09 13:23 大鳥 閱讀(271) 評論(0)  編輯  收藏 所屬分類: VBA
          主站蜘蛛池模板: 南康市| 平罗县| 岳阳市| 诸暨市| 阳城县| 色达县| 丰顺县| 赞皇县| 昭平县| 象州县| 武鸣县| 岑巩县| 班玛县| 大竹县| 原阳县| 马山县| 泗洪县| 宽城| 墨玉县| 云浮市| 屯留县| 资中县| 金寨县| 米泉市| 济宁市| 梁山县| 广灵县| 宜城市| 新河县| 常德市| 丰宁| 闻喜县| 文昌市| 蓝田县| 牙克石市| 青州市| 新安县| 简阳市| 汨罗市| 炎陵县| 电白县|