因为工作的原因要开发基于Word2003上的插件,然而使用ATL编写Word2003上的插件需要在添加一个ATL的简单对象,其实可以通过ATL简单对象的添加向导来完成,ATL技术中思想上很多包含了COM的开发思想,机制上也是一种COM机制,这必然涉及到COM运行机制的分析,简单的来说COM分为进程内加载调用和进程外加载调用,两者各有利弊,进程内调用,因为内存是共享的,所以效率高、速度快。但是缺点也是显而易见的,如果COM程序本身存在严重问题,则会直接导致调用者程序崩溃,COM进程外调用与此刚刚相反,不再赘述。Word插件做的就是一种进程内的COM调用,具体的原理不在本篇详谈,会在后面的文章中介绍,所以如果在调试的时候往往因为编写的COM程序有问题而造成打开后整个Word程序崩溃。Word自身有自我保护的功能,它可以检测到上次运行时使程序崩溃的dll,并拒绝加载这个dll,当然,是否拒绝会弹出对话框提示用户,让用户自己选择,然而对于这个功能在给应用者带来福音的同时,给开发者也带来了一些麻烦,弹出的对话框往往被误认为是开发的IDE环境弹出来的,这样程序员如果误选了不再加载的按钮,那么下次无论程序员如何再调试自己的ATL插件程序Word都会因为拒绝加载该项目生成的dll而看不到任何效果,即便采用加断点调试的方式也是无济于事的,原因很简单,问题根本不在你程序本身,也不在IDE环境,问题的根结在于Word拒绝载入dll文件,要解决这个问题的方法只要对症下药即可。
首先打开word,然后选择 “帮助-->关于Microsoft Word”,弹出如下窗口
点击“禁用项目”,弹出禁用项目对话框
在这里你可以看到之前因为加载而导致程序崩溃的dll,选择该dll,选择“启用”,这样下次再调试程序时就可以顺利加载了。
如果在OFFICE 2007或者OFFICE 2010版本上开发,则先点击“Word选项”按钮,如下图:
在弹出的对话框中选择“加载项”标签,然后在右边列表框中找到“禁用的应用程序加载项”
在管理的部分选择“禁用项目”,默认为“COM加载项”,然后点击“转到”进入操作界面。
转载于:https://blog.51cto.com/8413723/1729780