【问题标题】:Working with MSWord using OLE in Delphi 10.3在 Delphi 10.3 中使用 OLE 使用 MSWord
【发布时间】:2021-09-28 20:02:02
【问题描述】:

我在 Delphi 10 中使用 OLE 访问 MSWord 时遇到了一个奇怪的情况。这些问题在不同用户之间不一致,我们在将项目从 XE 迁移到 10.3 后开始得到他们的报告。

我已将示例简化为最基本的级别:创建了一个新的 VCL 应用程序项目并使用以下代码在表单上放置一个按钮:

procedure TForm1.Button1Click(Sender: TObject);
var
  W: OleVariant;
begin
  W := CreateOleObject('Word.Application');
  W.Quit;
  W := Unassigned;
end;

它在我的计算机上运行良好,但在我同事的计算机上退出该过程后冻结了大约 一分钟,他的实际产品也存在性能问题。我们都在具有 Win10 x64 系统的功能强大的计算机上工作。

退出例行程序时出现如此长时间的停止可能是什么原因?任何想法如何避免它?

【问题讨论】:

  • 不好意思打断一下,但是没有Delphi“XE 10”。最后是Delphi XE 8,然后是 10.x 系列 startet,没有“XE”!
  • 如果您的同事在实际产品中也存在性能问题,这也是导致 Delphi 代码问题的原因。解决 Word 本身的问题是 Super User 的问题,因为它与编程无关。

标签: delphi ole delphi-10.3-rio


【解决方案1】:

你没有什么特别的。

在 Delphi 方面应该没有区别,我敢打赌,在完全相同的代码上,旧的 Delphi 版本肯定会发生同样的情况。

我要检查的第一件事:自动生成的 Word 代码是否相同? 然后我不记得细节但有区别。对于 Office 应用程序,您可以获得指向正在运行的应用程序的 COM 指针或启动一个。通过另一个调用,您每次都可以获得“自己的”应用程序实例。

但我认为这不太可能是您最小场景中的原因。

所以另一个猜测是:它是 COM 对象内部的一个函数,它在做出反应。 我建议使用ProcessMonitor 记录 Word 的操作。 过滤除 Word 或实例的 PID 之外的所有内容。您应该在日志中找到阻止 Word 的内容。 (注册表、网络或文件)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多