您的位置:首页 > 其它

MSWORD.OLB未正确注册导致问题现象及解决方法

2014-02-11 09:28 323 查看
问题描述及解决

程序使用word,在启动程序时出错。通过定位,发现

在执行代码

m_comptrActiveDoc =
CComQIPtr<_Document>(m_Word.get_ActiveDocument());

后m_comptrActiveDoc = NULL,程序未对m_comptrActiveDoc进行判空直接使用导致程序崩溃。

问题是为什么m_comptrActiveDoc 返回NULL。跟进到CComQIPtr的构造函数,构造函数调用了QueryInterface函数。代码如下

CComQIPtr(_In_opt_IUnknown*lp)throw()
{
if (lp !=NULL)
lp->QueryInterface(*piid,(void **)&p);
}

在QueryInterface调用后p为NULL。

后来通过单独执行以下语句

char *p=
NULL;

int nReturn=m_Word.get_ActiveDocument()->QueryInterface(__uuidof(_Document),
(void**)&p);

发现nReturn为TYPE_E_CANTLOADLIBRARY。通过google发现,此种问题可能是MSWORD.OLB在注册表中的注册出现问题,导致此问题的一个可能原因是2003,2007安装卸了装,装了卸载。那么要做的事就是重新注册MSWORD.OLB。注册OLB的工具为regtlibv12.exe(C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe)。在cmd下注册命令为:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe""C:\Program Files\Microsoft Office\Office12\MSWORD.OLB"

成功界面如下



然后QueryInterface命令执行正确了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐