为什么我在容器中调用Word的页面设置对话框时总是会弹出一个消息框,说服务器正在运行中?
为什么我在容器中调用Word的页面设置对话框时总是会弹出一个消息框,说服务器正在运行中? 问题点数:100、回复次数:8Top
1 楼xindao_wang(山中客)回复于 2004-09-05 03:15:37 得分 0
我也遇到过类似的问题,可能的一种情况是在此之前调用word的服务时,没有释放连接,或者是释放的不干净。Top
2 楼wangweixing2000(星(inspiration(灵感)))回复于 2004-09-06 09:33:41 得分 0
你在看看是不是那个进程正在用word服务?Top
3 楼banjo(3天看问题)回复于 2004-09-06 09:35:11 得分 0
查看后台进程,杀掉Top
4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-06 18:56:20 得分 0
也可能是你引用什么接口时少调用了Release.Top
5 楼rano(性情中人)回复于 2004-09-06 19:09:13 得分 0
惨都尝试过了,还是会。我是用通过Item获得Document,再获得Application,再获得Dialogs,然后获得Dialog,然后调用Dialog的Show方法,一般是对话框弹出来几秒钟后出的那个提示Top
6 楼rano(性情中人)回复于 2004-09-06 20:24:40 得分 0
我是这样做的
在MSDN中找到MFCBIND示例
在它的CMFCBindView中加入这个函数,运行这个函数
_Document 、_Application 、Dialogs 、Dialog 是Word2000提供的模板库中的类
int CMFCBindView::ShowDialogItem()
{
LPDISPATCH lpDisp=GetDocument()->GetIDispatch();
TRY
{
_Document doc;
doc.AttachDispatch(lpDisp);
LPDISPATCH tp = doc.get_Application();
_Application app;
app.AttachDispatch(tp);
tp = app.get_Dialogs();
Dialogs dlgs;
dlgs.AttachDispatch(tp);
tp=dlgs.Item(n);
Dialog dlg;
dlg.AttachDispatch(tp);
long timeout=-1;
dlg.Show(COleVariant(timeout));
}
CATCH(CException, e)
{
}
END_CATCH
}Top
7 楼jiangsheng(蒋晟.Net[MVP])回复于 2004-09-10 08:19:08 得分 100
你使用了AfxOleInit()初始化MFC客户端时,会自动在CWinApp中设置一个COleMessageFilter数据成员。该类提供了IMessageFilter的实现,允许用户在等待异步操作的时候有选择性地处理COM操作以提高效率和避免死锁,参见IMessageFilter的文档。你可以创建你自己的COleMessageFilter类并且在此时注册。
可以用AfxOleGetMessageFilter()来访问这个对象。这个对象包含和COM服务器通讯的一些设置。
一些常用的方法
SetMessagePendingDelay(nTimeout);设置在COM调用之后,显示COM服务器忙对话框(COleBusyDialog)之前等待的时间
EnableBusyDialog(FALSE);禁用COM服务器忙对话框
EnableNotRespondingDialog(FALSE); 禁用未响应对话框。该对话框在鼠标或者键盘操作之后,COM调用超时时显示
使用OleInitialize初始化的程序不会显示这些对话框。
Top
8 楼rano(性情中人)回复于 2004-09-10 15:47:18 得分 0
感激、感谢各位的鼎力相助,困扰小弟一个多月的问题解决了,祝大家中秋节快乐Top




