对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xyz598375056/article/details/81541961

网上有很多答文,大部分都是因为Office多版本引起的dll调用不明确问题。此类通过删除注册表对应的office版本一般都能解决。

本人遇到的问题,是office2003 没有装在C盘,这也是我因为我向来不喜欢把东西装在C盘引起的。结果注册表搞了一大通,连路径都能记清楚了,还是没解决。后来想着是不是win Server 2016 服务器版本原因,是什么地方还需要进行设置,结果网上根本没有这与服务器版本有关的任何问题。最后才想到了office安装路径问题

这还没完,好不容易不报这个错误了,接着又在 doc.Save的时候,冒出一个命令失败的错误。网上比较公认的做法是,在管理工具 - 组件服务 - 我的电脑 - DOCM配置中,找到 MicroSoft Word,配置其权限。可我找了半天,连MicroSoft Word这一选项都没找到。

后来找到一篇文章:https://www.cnblogs.com/hack1506/p/4059090.html,居然是C盘上某个文件夹不存在:

64位服务器跟32位的区别是:
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop

楼主一一对应着找,发现少了Desktop这个文件夹,新建后,没想到真的可以了。此时我对这位博主是感激万分的

最后我想说,Office的组件调用起来简直就是蛋疼,可没办法,老项目中太多导出功能用的是这个,一旦服务器环境变了,可能得折腾好久,就算你第一次环境配过了,时间过久了,下次你就可能忘了。后来我把导出的代码换成NPOI,发现NPOI对word的操作也不是特别方便,尤其是在表格单元格中设置字体、添加段落、控制样式上,显得很吃力

 

 

展开阅读全文

动态链接COMdll时,IID如何处理

06-08

在dll中,我定义了IFace.h中包含了几个接口声明和IID的声明:rn#include rn#include "objbase.h"rn#include "unknwn.h"rnusing namespace std;rnextern "C" rnrn extern const IID IID_IX;rn extern const IID IID_IY;rn extern const IID IID_IZ;rnrnrnextern "C" IUnknown* _stdcall CreateInstance();rnrninterface IX: IUnknownrnrn virtual void _stdcall Fx()=0;rn;rnrninterface IY: IUnknownrnrn virtual void _stdcall Fy()=0;rnrn;rnrninterface IZ: IUnknownrnrn virtual void _stdcall Fz()=0;rn;rn这份文件被dll与用户使用,rndll中Guid.cpp文件定义了IID:rnrn#include "stdafx.h"rn#include "IFace.h"rn// 8C0D4FB0-E6B9-47ec-8135-B67E6541F912rnextern "C"rnrnrn extern const IID IID_IX= rn 0x8c0d4fb0, 0xe6b9, rn 0x47ec, 0x81, 0x35, 0xb6, 0x7e, 0x65, 0x41, 0xf9, 0x12 rn ;rnrn // A2D7DFDF-E9E7-46cd-8A57-5EC3CC586807rn extern const IID IID_IY= rn 0xa2d7dfdf, 0xe9e7, 0x46cd, rn 0x8a, 0x57, 0x5e, 0xc3, 0xcc, 0x58, 0x68, 0x7 rnrn ;rnrn // C301B0CB-3AB8-42a3-8F3F-ABD9AF50A919rn extern const IID IID_IZ= rn 0xc301b0cb, 0x3ab8, 0x42a3, rn 0x8f, 0x3f, 0xab, 0xd9, 0xaf, 0x50, 0xa9, 0x19 rn ;rn;rndll的客户引用了#include "IFace.h"rn为什么编译器报了这种错误:rn正在链接...rnCall.obj : error LNK2001: 无法解析的外部符号 _IID_IZrnCall.obj : error LNK2001: 无法解析的外部符号 _IID_IYrnCall.obj : error LNK2001: 无法解析的外部符号 _IID_IXrnD:\文档\程序\C++程序\COM+\ComDll\Debug\Call.exe : fatal error LNK1120: 3 个无法解析的外部命令rnrn 论坛

没有更多推荐了,返回首页