繁体   English   中英

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

[英]OLE automation: How to check if a variant references an automation object

我想知道如何确定变量是否引用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)来完成此操作,但是我认为这种方法不够好。

我正在阅读有关VarIsEmptyVarIsEmptyParamNothing的 问题 ,但我对此不确定。

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

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

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

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

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


但是,我质疑是否需要它。 没有分配PptFile怎么可能? 只有在对pptApp.Presentations.Open()的调用失败时才会发生,并且会引发异常。 还是我误会了这一点? 目前,我看不到任何可以调用尚未分配PptFile PptFile.SaveAs()的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM