这是自动化服务超时引起,它有一个默认的响应时间,解决方法:
在App::InitInstance()里AfxOleInit()之后加上这个:
AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);
AfxOleGetMessageFilter()->SetBusyReply(SERVERCALL_RETRYLATER);
AfxOleGetMessageFilter()->EnableNotRespondingDialog(TRUE);
AfxOleGetMessageFilter()->SetMessagePendingDelay (-1);
如果编译不通过,包含头文件#include <afxole.h>
COleMessageFilter类管理OLE应用程序交互所需要的并行能力。
COleMessageFilter类用于可视化编辑服务器和容器应用程序中,以及OLE自动化应用程序中。对于要调用的服务器应用程序,该类可使应用程序保持“忙”的状态,这样其他容器应用程序的调用请求就会被取消或稍后重试。当被调用的应用程序忙时,也可以使用该类确定调用者应用程序将采取什么样的动作。服务器应用程序常用的用法是在文档或其他OLE可访问的对象有可能遭到破坏的情况下调用BeginBusyState 和EndBusyState。在用户界面更新过程中,CWinApp::OnIdle将发起这些调用。
缺省地,当应用程序初始化时就分配一个COleMessageFilter对象。可以使用AfxOleGetMessageFilter检索该对象。
这是一个高级类;你很少需要直接使用该类。
要获得更详细的信息,请参阅“Visual C++ 程序员指南”在线文档中的“服务器:实施一个服务器”一节。
#include <afxole.h>
请参阅:
CCmdTarget
COleMessageFilter类成员
构造
| 构造一个COleMessageFilter对象 |
操作
| 注册OLE系统DLL的消息过滤器 | |
| Revoke | 激活OLE系统DLL消息过滤器的注册过程 |
| BeginBusyState | 使应用程序处于忙的状态 |
| EndBusyState | 结束应用程序忙的状态 |
| SetBusyReply | 确定忙的应用程序对OLE调用的回答 |
| SetRetryReply | 确定调用者应用程序对忙应用程序的回答 |
| SetMessagePendingDelay | 确定应用程序要等多长时间才对OLE调用做出响应 |
| EnableBusyDialog | 使能或禁止在被调用的应用程序处于忙状态时所显示的对话框 |
| EnableNotRespondingDialog | 使能或禁止在被调用的应用程序没有响应时所显示的对话框 |
|
OnMessagePending
| 在处理OLE调用时框架调用该方法处理消息 |

当遇到VBA自动化服务超时导致的'由于另一个程序正在运行中,此操作无法完成.'错误时,可以通过在App::InitInstance()函数中设置Ole消息过滤器来解决。具体解决方案是在AfxOleInit()之后添加代码,禁用忙碌对话框,设置繁忙回复,并启用未响应对话框,同时设置消息延迟为-1。如果需要,需包含afxole.h头文件。"
107306780,8679177,前端调试与绘制饼图实战,"['前端开发', 'JavaScript', '数据可视化']
1805

被折叠的 条评论
为什么被折叠?



