MODI與VB6

做者:馬健
郵箱:stronghorse_mj@hotmail.com
主頁:http://www.comicer.com/stronghorse
發佈:2016.12.16架構

在我寫的《用MODI OCR 21種語言》、《MODI中的OCR模塊》發佈後,貌似使用MODI作OCR的人也多了起來。前幾天應某人的要求,我在VB6下試着調用了一下MODI,卻發現出現了一點兼容性問題。工具

由於Office 2007所帶的MODI(如下簡稱「MODI 2007」,微軟正式的版本號是MODI 12.0)比Office 2003所帶的MODI(如下簡稱「MODI 2003」,微軟版本號MODI 11.0)更簡潔,因此我在以上兩篇文章中一直說的是MODI 2007,在個人網盤上也只放出來MODI 2007的安裝包。由於我之前只用VC作開發,而VC的開發環境(IDE)與MODI 2007沒有什麼兼容性問題,因此我也就沒在乎MODI版本的區別。但在VB裏試了一下以後,卻發現MODI 2007與VB6開發環境(IDE)在兼容性上有一點小小的小問題:VB代碼若是調用了MODI 2007(Microsoft Office Document Imaging 12.0 Type Library),在VB6 IDE下能夠正常使用,但只能用一次,即若是您的VB6程序中調用了MODI 2007,則點擊VB6 IDE工具條上的Start按鈕是能夠正常運行的,但程序運行結束後若是您沒有退出VB6 IDE,而是再次點擊工具條上的Start按鈕,則VB6 IDE會報錯,最好的狀況是報告對象建立失敗,但最多見的狀況是直接退出整個IDE。即每啓動一次IDE,只能運行調用MODI 2007的VB6程序一次。測試

出現這個問題的緣由,我猜是VB6 IDE的管理有問題,即每次Debug的程序退出後,可能沒有徹底釋放DLL或清內存,恰好MODI 2007又是不可重入的,因此就撞上了。VC6的IDE就沒有這問題,因此若是用VC6寫的程序調用了MODI 2007,在VC6的IDE裏運行多少次都不會致使IDE出錯退出。架構設計

經反覆測試,MODI 2007與VB6的兼容性只針對VB6的IDE,若是已經編譯成了EXE文件,則不管單獨運行此EXE多少遍,也不會出現上面說的問題。因此我才懷疑這是VB6 IDE自身的管理問題。設計

要解決這個問題,最簡單的辦法就是放棄MODI 2007,改用MODI 2003,由於MODI 2003是用VC6開發的,與VB6 IDE配合良好,沒有上面說的兼容性問題。因此此次在個人網盤上增長放出MODI 2003的單獨安裝包,一樣支持21種語言。語言文件基本上都是從Office 2007拷貝過來的,由於我搞不到Office 2003的多國語言包。不過這個貌似也不會出現啥兼容性問題,在x86 XP、x64 Win7下實測。對象

我沒有詳細比較過MODI 2003與2007在OCR質量上的差距,不過我放出的語言文件都是相同的,因此我我的認爲在OCR質量上不會有什麼差距,只是微軟調整了一下架構,而後按照新的架構用VC 2005把原先用VC6寫的代碼又改了一遍,沒有觸及到OCR引擎的核心,畢竟這個引擎不是微軟本身寫的,也不能說改就改。MODI 2003是微軟在Office產品中第一次提供OCR功能,因此架構設計方面彷佛不是很完美,把MODI與文本校對工具混在一塊兒了,因此我本身剝離出來的MODI 2003獨立安裝包要比2007的文件更多,註冊表項更復雜,我本身都不想用批處理去寫註冊表項生成部分,因此安裝前請務必先看安裝說明。內存

另外若是直接用VB代碼調用MODI還有一個小小的注意事項:若是用VB代碼直接調用MODI,則開發時若是選擇了MODI 2003,軟件編譯發行後用戶端也必須安裝MODI 2003,由於純VB代碼在使用MODI前,須要先經過IDE的Project->References菜單選擇Microsoft Office Document Imaging 11.0 Type Library,選完之後這一串字符就寫死在源代碼中了,編譯後到用戶那裏運行,就要按照原先選定的版本去找MODI,找不到就報錯。開發

若是想讓最終客戶能夠自由選擇是安裝MODI 2003仍是2007(畢竟安裝2007更簡單一點,還有微軟官方提供的圖文並茂安裝指導),辦法只有一個:用VC開發DLL或ActivX控件,把對MODI的調用封裝到底層,在VB中再也不須要選擇MODI Type Library的版本。get

這樣作的原理其實很簡單:在VC中調用MODI時,能夠不選擇MODI Type Library的版本,這樣就無所謂用的是哪一個版本了。VB代碼中也就再也不會出現MODI類庫的版本號,只須要像正常調用系統DLL或其餘控件那樣調用便可。就像我本身用VC寫的DjVuToy、FreePic2Pdf、Pdg2Pic、TextForever等,在MODI 200七、2003下都能用,不挑剔。產品

注意:在Windows 7/10下,C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE必須以管理員身份運行,編譯後的EXE也必須以管理員身份運行,才能正常調用MODI。 注意:在Windows 7/10下,C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE必須以管理員身份運行,編譯後的EXE也必須以管理員身份運行,才能正常調用MODI。 注意:在Windows 7/10下,C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE必須以管理員身份運行,編譯後的EXE也必須以管理員身份運行,才能正常調用MODI。 重要的事情要說三遍。 (完)

相關文章
相關標籤/搜索