大鳥的學習樂園
          路漫漫其修遠兮,吾將上下而求索
          posts - 26,comments - 27,trackbacks - 0
          到現在為止,本教程一直討論基于activex dlls中的類的內容,但是沒有一本教程不說明與dll相似的activex exes。

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

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

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

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

             假如,activex dll變得不穩定或意外受損時,使用它的應用程序常常出現藍屏的死機現象,而在exes中卻不會發生,因為它有自己的\"進程空間\",即使被破壞,也僅僅是桌面受損,當然用戶程序應該很好地去修復它。

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

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

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

             這里再來分析第二點的區別。

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

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

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

             不怕你驚訝的話,我們可以將前面論述的內容總結成這樣的一句話:

             \"activex dlls是在進程內運行,而activex exes是在進程外運行\"。

             好了,下一節將創建并測試一個自己的activex exe工程,并使用大家還不太熟悉的\"異步處理\"技巧。然后,提出一個稱為\"實例\"的有意義的概念,最后指明怎樣獲得更多的com知識使自己達到一個新的水平。
          posted on 2008-12-09 13:23 大鳥 閱讀(269) 評論(0)  編輯  收藏 所屬分類: VBA
          主站蜘蛛池模板: 宁德市| 舞钢市| 维西| 平塘县| 双牌县| 平果县| 西乌珠穆沁旗| 虞城县| 阜康市| 永清县| 桐乡市| 平和县| 宝丰县| 湖北省| 大田县| 星子县| 勃利县| 库伦旗| 交口县| 朝阳县| 凌源市| 宁夏| 伊川县| 临沭县| 绥阳县| 上蔡县| 津南区| 永仁县| 哈尔滨市| 故城县| 老河口市| 灌云县| 红原县| 准格尔旗| 略阳县| 铁岭县| 云梦县| 古蔺县| 加查县| 沙雅县| 克东县|