到現(xiàn)在為止,本教程一直討論基于activex dlls中的類(lèi)的內(nèi)容,但是沒(méi)有一本教程不說(shuō)明與dll相似的activex exes。
所以,想在這里實(shí)際編寫(xiě)一個(gè)activex exe工程。事實(shí)上,它和activex dll沒(méi)有太大的區(qū)別,甚至沒(méi)有區(qū)別。在啟動(dòng)visual basic后選擇\"activex exe\"就可創(chuàng)建,然后像以前一樣構(gòu)造自己的類(lèi)。
但這里不想再作更詳細(xì)的討論,因?yàn)閍ctivex exe和activex dll除了在運(yùn)行時(shí)有一些微小區(qū)別外,其他都相同。
它們的區(qū)別首先表現(xiàn)在它們的\"進(jìn)程空間\"的不同。所謂\"進(jìn)程空間\"是用于運(yùn)行、處理和存取的一塊計(jì)算機(jī)內(nèi)存。任何windows程序,如microsoft word等,都有自己的\"進(jìn)程空間\",它很像程序的桌面那樣。
當(dāng)使用activex dlls工程運(yùn)行時(shí),dll是在使用它的程序的進(jìn)程空間中運(yùn)行的,而activex exe是在進(jìn)程空間外面工作的。但是,activex exe還有自己的\"桌面\"。這究竟如何理解呢?
假如,activex dll變得不穩(wěn)定或意外受損時(shí),使用它的應(yīng)用程序常常出現(xiàn)藍(lán)屏的死機(jī)現(xiàn)象,而在exes中卻不會(huì)發(fā)生,因?yàn)樗凶约旱腬"進(jìn)程空間\",即使被破壞,也僅僅是桌面受損,當(dāng)然用戶(hù)程序應(yīng)該很好地去修復(fù)它。
其次,它們的區(qū)別還表現(xiàn)在裝載的速度上。由于dll是直接裝載到已存在的進(jìn)程空間,所以它的速度非常快。而exes由于還要分配自己的進(jìn)程空間,所以速度上相對(duì)慢一點(diǎn)。
上述兩點(diǎn)區(qū)別可以說(shuō)是它們真正的區(qū)別。
總之,如果使用不同的windows工具來(lái)實(shí)現(xiàn)相應(yīng)的activex組件,那么相應(yīng)的工程類(lèi)型就應(yīng)該有所不同。例如,若使用mts,則應(yīng)創(chuàng)建dll工程,若使用dcom,則應(yīng)創(chuàng)建exe工程。當(dāng)然,即使現(xiàn)在不理解這此縮寫(xiě)字母的含義,我們也不必?fù)?dān)心。因?yàn)樗鼈兪轻槍?duì)高級(jí)用戶(hù)的,并用于com遠(yuǎn)程的工具組件。以后有機(jī)會(huì)再來(lái)給出相應(yīng)的教程。
這里再來(lái)分析第二點(diǎn)的區(qū)別。
如果現(xiàn)在需要?jiǎng)?chuàng)建這樣的一個(gè)程序,它不斷地檢測(cè)一個(gè)數(shù)據(jù)庫(kù)是否有什么改變。那么我們想到的是在程序中使用一些\"timer\"(計(jì)時(shí)器),每隔10分鐘激發(fā)一次并檢測(cè)該數(shù)據(jù)庫(kù)。但問(wèn)題來(lái)了,在該進(jìn)程空間的其他所有代碼都要被停止運(yùn)行直至數(shù)據(jù)庫(kù)檢測(cè)完畢。
而activex exes偉大之處,就在于它有自己的進(jìn)程空間。所以在其中添加的計(jì)時(shí)器也只會(huì)工作在自己的進(jìn)程空間中而不會(huì)影響其他使用它的程序。也就是說(shuō),對(duì)于前面的工程來(lái)說(shuō),若使用activex exe來(lái)檢測(cè)數(shù)據(jù)庫(kù),則不會(huì)停止其他使用它的程序的運(yùn)行;即使需要從其他程序中返回一個(gè)消息,也可以通過(guò)其他事件而獲得。
需要說(shuō)明的是,運(yùn)行代碼遠(yuǎn)離正規(guī)程序而通過(guò)事件與使用的應(yīng)用程序會(huì)話(huà)的方法稱(chēng)為\"異步處理\"。通常當(dāng)需要對(duì)e-mail或數(shù)據(jù)庫(kù)作定期檢查時(shí),或當(dāng)運(yùn)行一個(gè)長(zhǎng)的報(bào)表以及計(jì)算大的統(tǒng)計(jì)數(shù)據(jù)時(shí),我們就需使用這種異步處理方式。
不怕你驚訝的話(huà),我們可以將前面論述的內(nèi)容總結(jié)成這樣的一句話(huà):
\"activex dlls是在進(jìn)程內(nèi)運(yùn)行,而activex exes是在進(jìn)程外運(yùn)行\(zhòng)"。
好了,下一節(jié)將創(chuàng)建并測(cè)試一個(gè)自己的activex exe工程,并使用大家還不太熟悉的\"異步處理\"技巧。然后,提出一個(gè)稱(chēng)為\"實(shí)例\"的有意義的概念,最后指明怎樣獲得更多的com知識(shí)使自己達(dá)到一個(gè)新的水平。
posted on 2008-12-09 13:23
大鳥(niǎo) 閱讀(275)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
VBA