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。 重要的事情要说三遍。 (完)