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

Excel Delphi Ole-突然错误-不支持接口,excel,delphi,ole,Excel,Delphi,Ole,德尔福东京办事处,2016年。我有一个现有的应用程序,已经运行了一段时间了。我今天早上去运行应用程序,突然它抛出了一个错误。我打开源代码并逐步完成它。它将抛出以下错误: ”项目。。。引发异常类EIntfCastError,消息为“接口不受支持”。 导致问题的代码行为 oExcel := CreateOleObject('Excel.Application') as ExcelApplication; 源代码没有更改。该问题首先在可执行文件中发现。Excel似乎运行良好。还有一个事实,可能与此相

德尔福东京办事处,2016年。我有一个现有的应用程序,已经运行了一段时间了。我今天早上去运行应用程序,突然它抛出了一个错误。我打开源代码并逐步完成它。它将抛出以下错误:

”项目。。。引发异常类EIntfCastError,消息为“接口不受支持”。

导致问题的代码行为

oExcel := CreateOleObject('Excel.Application') as ExcelApplication;
源代码没有更改。该问题首先在可执行文件中发现。Excel似乎运行良好。还有一个事实,可能与此相关,也可能与此无关。。。每次启动Outlook时,我都会收到一条弹出的错误消息“无法加载提升应用程序”。这大约是1个月前开始的,据我所知,自从我开始收到这条消息以来,我不相信我已经运行了我的应用程序。我找不到关于这方面的任何信息,但它似乎不会影响Outlook。(我为MS Office 2016执行了快速修复和在线修复,但这两项工作都没有改变任何事情。)当我查看Outlook插件时,我没有任何名为“提升”的插件

Outlook问题可能与Excel问题相关,也可能与Excel问题无关


这是怎么回事?如何进一步调试这个问题?

我将把代码分为两个步骤,一个是创建Ole对象,另一个是创建Ole对象 提取Excel应用程序接口。通过这种方式,您可以轻松确定 这两个步骤中的一个是生成异常。像这样的

var
  oExcel : OleVariant;

...
  oExcel := CreateOleObject('Excel.Application');
  oExcel := IDispatch(oExcel) as ExcelApplication;
老实说,当我第一次看到你的代码时,我很惊讶它是在第一次编译的 地方,但我检查了一下,确实有

但是,分配ExcelApplication接口并没有多大意义 回到一个变体。最好将其分配给接口变量并使用 这是为了利用早期绑定、类型安全性和可用的代码完成 在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专家会插手此事。

您是否尝试过将
oExcel:=CreateOleObject('Excel.Application')作为ExcelApplication
拆分为两个,即将
CreateOleObject
作为ExcelApplication
拆分为两个单独的语句,以便您可以看到是哪一个语句导致了异常?“这很可能是第二个,但最好确定一下。”马丁。语法不正确。。。。。这是有效的。。myApp:=CreateOleObject('Excel.Application')。。。如果myApp定义为OleVariant。然后如何将其转换为类型ExcelApplication?我尝试了几件事情,但编译器抱怨。我这样做的方式是
oExcel:=IDispatch(oExcel)as ExcelApplication
,我不知道为什么,但用一行代码(过去工作很好)将其拆分为两行就解决了问题。如果你有什么想法,请告诉我。提交作为答案,我将接受。。。知道是什么引起了海拔高度的问题吗?谢谢。我已经发布了我以前的评论作为答案。对不起,我不知道Outlook的问题,不管怎样,我认为如果你需要答案,你应该在一个新的q中提出这个问题。它曾经是一行,但是“发生了什么事”,它停止了工作。把它分成两行就解决了这个问题。