OLE自动化:如何检查变量是否引用自动化对象

时间:2013-11-29 11:54:48

标签: delphi powerpoint ole delphi-5 ole-automation

我想知道如何确定变量是否引用OLE自动化对象。

我正在将一些Excel图表导出到Powerpoint。

我有这段代码:

var PptFile: Variant;

....

// PptFile _might_ be initialized:

PptFile:=pptApp.Presentations.Open(pptFilename);

// It depends on whether the export has items which need to be exported to 
// Powerpoint or not

....

// I would like to determine if PptFile does reference an OLE automated object or not
PptFile.SaveAs(excelFileName+'.pptx');

我知道,可以通过在try...except...end之间放置代码的最后一行(使用saveAs)来完成,但我觉得这种方法不够好。

我正在阅读有关VarIsEmptyVarIsEmptyParamNothingthis question的内容,但我对此并不确定。

1 个答案:

答案 0 :(得分:6)

您应该使用VarIsClear进行此测试。

  

指示指定的变量是否具有未定义的值。   如果给定变量的值未定义,则VarIsClear返回true。该   由于以下几个原因,值可能未定义:

     
      
  • Variant可能已将其值设置为“未分配”。
  •   
  • Variant的值可能是已设置为nil(Delphi)或NULL(C ++)的接口类型。
  •   
  • Variant可以是从其IsClear方法返回true的自定义变体。
  •   
     

在所有其他情况下,函数结果为false。

     

注意:不要将未分配的变体与Null变体混淆。仍然分配了Null变量,但其值为Null。不像   未分配的变体,Null变体可以在表达式中使用并且可以   转换为其他类型的变种。


但是,我怀疑是否需要它。怎么可能没有分配PptFile?只有在对pptApp.Presentations.Open()的调用失败时才会发生这种情况,这会引发异常。或者我误解了这个?目前,我无法看到您可以接听PptFile.SaveAs()来自PptFile尚未分配的电话的任何情况。