VC 操作Word, Excel 出现服务器正在运行中 Ole Server Busy对话框的原因分析和解决建议
问题描述:
最近帮朋友弄个程序,处理Office Excel表.该Excel表加了密码,并且含有很多数据,当在VC中通过 Excel Ole对象打开该Excel文档时候,出现 "服务器正在运行中“对话框,其中有”切换到。。。“按钮。
根本原因:
发现问题我知道这是Ole Server Busy对话框,但是我不知为什么会弹出该对话框,是系统默认的还是可以进行定制。经过搜索发现微软对该问题进行了解释。
地址如下:
http://support.microsoft.com/kb/248019/en-us
大意是说:如果你使用了MFC 应用程序并且初始化COM环境使用的是AfxOleInit,当执行一个需要很长时间返回的COM调用时就会遇到这个问题。
一般使用MFC客户应用程序,包含消息循环,推荐使用AfxOleInit来初始化COM. 而AfxOleInit默认会设置Ole消息过滤器.请看AfxOleInit的源码:
BOOL AFXAPI AfxOleInit()
{
...
// allocate and initialize default message filter
if (pThread->m_pMessageFilter == NULL)
{
pThread->m_pMessageFilter = new COleMessageFilter;
ASSERT(AfxOleGetMessageFilter() != NULL);
AfxOleGetMessageFilter()->Register();
}
return TRUE;
InitFailed:
AfxOleTerm();
return FALSE;
}
COleMessageFilter就是用来使被调用的Ole Server 应用处于一个Busy的状态,以便于其他调用这个Ole Server 应用能够进行相应的处理或者Retry.
通过查看COleMessageFilter()构造函数,会发现默认是会显示Ole Server Busy对话框和Not Responding 对话框的。所以当一个COM调用需要花很长时间才返回,出现这个对话框是正常的。
COleMessageFilter::COleMessageFilter()
{
// begin in not-busy state
m_nBusyCount = 0;
// dialogs are enabled by default
m_bEnableBusy = TRUE;
m_bEnableNotResponding = TRUE;
m_nBusyReply = SERVERCALL_RETRYLATER;
// effective only when m_nBusyCount != 0
m_nRetryReply = 10000; // default is 10 sec
m_nTimeout = 8000; // default is 8 sec
m_bUnblocking = FALSE;
// TRUE to avoid re-entrancy when busy dialog is up
m_bRegistered = FALSE;
ASSERT_VALID(this);
}
解决方案:
微软官方给出的解决方案是:
1, 使用 AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout); 来延长超时时间,也就是延长出现对话框的时间,但如果到这个时间还没有返回,这个对话框还是会出来。
2,使用
AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE);
AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);
来阻止弹出Server Busy 对话框和Not Responding 对话框。
即使用了第2种方案,对话框是不弹了,但是客户应用还是处于一个freeze的状态,所以为了客户应用友好,最好创建一个线程函数,在线程函数中显示一个进度条对话框,等待一个Event,并且定时处理消息循环,当COM调用返回后,设置Event为有信号状态,关闭进度条。
VC 操作Word, Excel 出现服务器正在运行中 Ole Server Busy对话框的原因分析和解决建议相关推荐
- 百度服务器最近不稳定,百度收录量持续减少的原因分析与解决办法
半个月前主机吧网站遭遇到了大多数站长都会到的问题:网站收录量持续减少. 刚开始的时候主机吧没有在意,因为偶尔一两天的收录减少是很正常的.直到收录量持续减少后,主机吧才开始发觉这并不是正常的现象. 主机 ...
- Excel按键盘无法跳转和滚动单元格的原因分析和解决方法
在Excel中,当我们选中一个单元格或者区域后,再按键盘的方向键或者组合快捷键(如Ctrl+方向键.Shift+方向键等),则光标会跟随着方向键移动到其他的单元格或区域. 但是有的小伙伴在使用Exce ...
- 消息框:服务器正在运行中 OLE解决办法
你使用了AfxOleInit()初始化MFC客户端时,会自动在CWinApp中设置一个COleMessageFilter数据成员.该类提供了IMessageFilter的实现,允许用户在等待异步操作的 ...
- win8.1 服务器正在运行,Win8.1系统打开IE浏览器提示服务器正在运行中的解决方法图文教程...
win8.1系统自带有ie浏览器,在使用过程中难免会遇到一些故障问题,这不有些用户说win8.1系统打开ie浏览器提示"服务器正在运行中",导致浏览器无法正常运行,该如何解决呢?大 ...
- VC++ 操作 word
摘要: 使用VC编程来操纵Office.你可以实现诸如:Word文件打印.传送数据到Word文档.发送E-MAIL.自动产生表格.Excel数据统计.圆饼图,直方图显示.自动报表生成.播放幻灯.doc ...
- VC++ 操作Word
摘要: 使用VC编程来操纵Office.你可以实现诸如:Word文件打印.传送数据到Word文档.发送E-MAIL.自动产生表格.Excel数据统计.圆饼图,直方图显示.自动报表生成.播放幻灯.doc ...
- jacob操作word excel 将word excel转换成网页形式
jacob操作word excel(来自http://sinye.iteye.com/blog/588050) 项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理 ...
- VC操作word绘制表格
VC操作word绘制表格时,需要选择绘制好的整个表格框居中显示, 1,如何选中整个表格框,表格的对象table,然后居中 2.表格的个性化设置,表格项内再次设计一个m*n的表格框 ...
- C#Aspose操作Word Excel简版(后会研究补充更多功能)
利用Aspose操作Word & Excel首先要在项目中标引用Aspose.Words.dll和Aspose.Cells.dll. 首先说一说向Word中写入数据,目前做的是向Word中的标 ...
最新文章
- codeception (4)Yii2下创建Acceptance Tests(验收测试)
- 机械臂底层通信协议说明
- matlab模拟钢琴演奏
- html鼠标响应事件吗,学习JavaScript鼠标响应事件
- fortran语言能用matlab,Fortran语言转matlab语言
- WinAPI: 钩子回调函数之 CallWndProcRetProc
- 天正电气lisp是什么文件_模仿天正电气低压系统图 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
- VS C#生成dll,C#和unity工程调用
- Atitit.创建快捷方式 windows快捷方式的原理
- 如何在 Codeforces 上出题?
- VsCode必备插件
- deb包一般放在linux的哪个目录下,deb包安装目录详解
- navicat 导入dmp文件
- 再见2018,你好2019!
- 常用Java数据库连接池性能测试
- 汉语中的 熟语中的成语900个
- Crack:::Stimulsoft Ultimate 2023.1.2
- 计算机窗口中如何移动文件,简单介绍一下电脑中的文件或文件夹的复制、移动及删除的操作方式...
- 接手1号店的京东 更看重与沃尔玛的合作
- 菜鸟站长的坎坷建站经历
热门文章
- 解释一下后面的指令是什么意思:wget https://git.io/vpn -O openvpn-install.sh bash openvpn-install.sh...
- newifi mini纯净版OpenWrt兼容内核固件,集成rt2860v2、mt76x2e驱动
- 电脑html接口显示器不亮,台式电脑显示器不亮该怎么办 台式电脑显示器不亮的解决方法【图文】...
- 总结笔记 || 软件测试的基础理论(测试模型+测试用例+软件缺陷+测试总结......
- Photoshop肖像数字绘画中的照明和色彩艺术
- 超大声:“Python是世界上最好的语言,不服来辩!”(狗头保命)
- 计算机多媒体教程,计算机多媒体技术教程.ppt
- 谁看了日本LINE的聊天记录
- 写出10个常用的html标记,《HTML常用标签》
- 2021.10.13股票小计