Delphi Ole - 突发错误 - 不支持接口

Delphi Ole - Sudden Error - Interface not supported

Delphi 东京,Office 2016。我有一个现有的应用程序,已经 运行 好用了一段时间。我今天早上去了 运行 应用程序,突然它抛出了一个错误。我打开源代码并逐步执行它。它抛出以下错误:

'Project ... raised exception class EIntfCastError with message 'Interface not supported'.

导致问题的代码行是

oExcel := CreateOleObject('Excel.Application') as ExcelApplication;

源代码没有改变。该问题首先在可执行文件中发现。 Excel 似乎工作正常。还有一个事实,可能相关也可能不相关……每次我启动 Outlook 时,我都会收到一条弹出式错误消息 'Failed to load the elevation application'。这大约是 1 个月前开始的,据我所知,自从我开始收到此消息后,我不相信我的申请 运行。我找不到有关此的任何信息,但它似乎不会影响 Outlook。 (我已经为 MS Office 2016 执行了快速修复和在线修复,但是这两种努力都没有任何改变。)当我查看 Outlook 插件时,我没有任何名为 'Elevation'.[=13= 的插件]

Outlook 问题可能与 Excel 问题有关,也可能无关。

这是怎么回事?我该如何进一步调试?

我会将您的代码分成两步,一步创建 Ole 对象,另一步 提取 ExcelApplication 接口。这样,您可以轻松识别哪个 这两个步骤中的一个正在生成异常。像这样

var
  oExcel : OleVariant;

...
  oExcel := CreateOleObject('Excel.Application');
  oExcel := IDispatch(oExcel) as ExcelApplication;

老实说,当我第一次看到你的代码时,我很惊讶它在第一个编译 地方,但我检查了一下,确实如此。

但是,分配ExcelApplication接口确实没有太多意义 回到 OleVariant。最好将它分配给接口变量并使用 利用可用的早期绑定、类型安全和代码完成 在 IDE。所以我会做这样的事情,而不是:

var
  oExcel : OleVariant;
  Excel : ExcelApplication;

...
  oExcel := CreateOleObject('Excel.Application');
  Excel := IDispatch(oExcel) as ExcelApplication;
  //  then use the Excel interface instead of oExcel.

Tbh,我在 COM/Ole 方面不够专业,无法确定为什么将原始的单个步骤分成两步会导致它不起作用和起作用之间的区别。也许 COM 专家会参与其中。