作者:馬健
郵箱: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的版本。
這樣做的原理其實很簡單:在VC中調用MODI時,可以不選擇MODI Type Library的版本,這樣就無所謂用的是哪個版本了。VB代碼中也就不再會出現MODI類庫的版本號,只需要像正常調用系統DLL或其他控件那樣調用即可。就像我自己用VC寫的DjVuToy、FreePic2Pdf、Pdg2Pic、TextForever等,在MODI 2007、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。
重要的事情要說三遍。
(完)