gpt4 book ai didi

delphi - "Call Rejected By Callee"

转载 作者:行者123 更新时间:2023-12-03 14:58:53 24 4
gpt4 key购买 nike

我们正在将大量应用程序从 Windows XP 迁移到 Windows 7,但遇到了 Word Automation 的老问题。

我们的一个应用程序遇到了一个问题,当尝试连接到 Word 时,除非它已经打开,否则我们会收到“调用被被调用者拒绝”的消息。我们在 Delphi 2000/Windows XP 中使用以下代码解决了这个问题:

WordApp.Connect;
WordApp.Visible := True;
WordApp.Documents.Add(Template, EmptyParam, EmptyParam, EmptyParam);
WordApp.ChangeFileOpenDirectory(jdir);
WordApp.Visible := False;
WordDoc.ConnectTo(WordApp.ActiveDocument);

这在 Windows 7 下不再起作用 - 并且在 XE2 下重新编译似乎没有帮助。

我看过一个相关问题here与 Visual Studio 相关 - 任何人都知道如何将其应用到 Delphi(现阶段 XE2 就可以了)

最佳答案

当您连接/连接到的实例当前处于交互模式时(例如打开的对话框),会发生“调用被被调用者拒绝”错误。或者,在 Excel 中,正在编辑的单元格,甚至处于正在编辑的单元格被用户从应用程序切换出去而中断的状态 - 当他返回时,可能看起来编辑已完成,但交互式在选择不同的单元格之前,模式不会结束。

因此,我不明白为什么您在连接时会收到此错误,除非另一个实例已打开。如果没有打开(且可见)的实例,则 Word 无法处于交互模式,并且您不应该收到该错误。有没有可能你的补救措施只是规避了真正的问题?

无论如何,您都处于尝试连接到处于交互模式的实例的情况。要么是事先发生的,要么是由您的代码引起的。当您从 XP 切换到 Windows 7 时,UAC 确实可能是罪魁祸首。

我会放弃这个解决方法,看看它会带你去哪里。

对于 Word 自动化,我始终确保:

  • 我使用 ckNewInstance 的 ConnectKind 连接到专用实例,并且
  • 确保我的专用实例不可见或
  • 确保仅在完成所有操作后才使其可见,并且可以将实例移交给用户。

如果您别无选择,只能针对可见(因此非专用)Word 实例进行自动化,那么您只需处理出现此错误的可能性。当出现这种情况时,提醒用户发生了什么,并确保您提供重试。

更新@Hendra 的评论中提到的 Embarcadero 论坛上的帖子包含一些非常有用的 MSDN 文档的链接:Fixing 'Application is Busy' and 'Call was Rejected By Callee' Errors

关于delphi - "Call Rejected By Callee",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11249154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com