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

时间:2018-06-05 15:35:24

标签: excel delphi ole

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

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

导致问题的代码行是

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

源代码没有改变。该问题首先在可执行文件中找到。 Excel似乎工作正常。还有一个事实,可能相关或不相关......每次启动Outlook时,我都会收到一条弹出错误消息“无法加载提升应用程序”。这开始于大约1个月前,据我所知,自从我开始接收此消息后,我不相信我已经运行了我的应用程序。我找不到任何有关此信息,但它似乎没有影响Outlook。 (我已经为MS Office 2016执行了快速修复和在线修复,但两种方法都没有改变。)当我查看Outlook插件时,我没有任何名为“Elevation”的插件。

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

这里发生了什么?如何进一步调试?

1 个答案:

答案 0 :(得分:2)

我会将代码分成两个步骤,一个用于创建Ole对象,另一个用于创建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专家会参与其中。