com 相关说明

本文探讨了在不同权限下使用COM接口调用Office及WPS组件时遇到的问题,包括权限不足、无效类字符串错误及服务器正在运行中的对话框提示,并提供了详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

1.  金山WPS 的try catch捕获能力弱,所以增加m_lpDispatch判断!!! 不过也是在容易出错的地方增加。

2.打开一个文档,在获取这个文档实例的时候需要相应的权限。 如果你是管理员打开的ppt文件,那么程序运行也需要管理员权限。
 
3.word,excel(通WPS文档,表格)采用InitGetQueryAPP才能获得激活程序实例,InitCreateApp不能获取。PPT,PS,AI两种模式都能获得激活程序实例

4. 微软Office:以普通用户身份或管理员身份调用CreateDispatch加载MsOffice组件都能成功。win7可以,win10不行。
金山Office:以普通用户身份调用CreateDispatch加载WpsOffice成功,但以管理员身份则失败,提示无效的类字符串,GetLastError值1008(试图引用不存在的令牌。)

 5.win10 以普通用户打开office,管理员运行CreateDispatch程序,提示“服务正在运行中”的一个对话框;以管理员打开office,普通用户运行CreateDispatch程序,报错信息提示需要权限不够。

6.VC 操作Word, Excel 出现"服务器正在运行中" Ole Server Busy对话框的原因分析和解决建议
如果你使用了MFC 应用程序并且初始化COM环境使用的是AfxOleInit,当执行一个需要很长时间返回的COM调用时就会遇到这个问题。
一般使用MFC客户应用程序,包含消息循环,推荐使用AfxOleInit来初始化COM. 而AfxOleInit默认会设置Ole消息过滤器.
AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);
在出现该问题的操作之前加入下面代码即可:
if (!AfxOleInit()) return false;
AfxOleGetMessageFilter()->SetBusyReply(SERVERCALL_RETRYLATER);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(TRUE);
AfxOleGetMessageFilter()->SetMessagePendingDelay(-1);
注意:在加入上面代码的源文件的顶部包含头文件:#include <afxole.h>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值