到現(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