簡體   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