OLE-автоматизация: как проверить, ссылается ли вариант на объект автоматизации
Я хотел бы знать, как я могу определить, ссылается ли вариант на объект автоматизации 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');
Я знаю, это можно сделать, поместив последнюю строку кода (с saveAs) между try...except...end
, но я не чувствую, что такой подход достаточно хорош.
Я читал о VarIsEmpty
, VarIsEmptyParam
Ничего, этот вопрос, но я не уверен в этом.
1 ответ
Вы должны использовать VarIsClear
для этого теста.
Указывает, имеет ли указанный вариант неопределенное значение.VarIsClear возвращает true, если значение данного варианта не определено. Значение может быть неопределенным по любой из нескольких причин:
- Возможно, для Variant установлено значение Unassigned.
- Значением варианта может быть тип интерфейса, для которого установлено значение nil (Delphi) или NULL (C++).
- Вариант может быть пользовательским вариантом, который возвращает true из своего метода IsClear.
Во всех остальных случаях результат функции ложен.
Примечание. Не путайте неназначенный вариант с нулевым вариантом. Вариант Null все еще назначен, но имеет значение Null. В отличие от неназначенных вариантов, нулевые варианты могут использоваться в выражениях и могут быть преобразованы в другие типы вариантов.
Однако я задаюсь вопросом, нужно ли это. Как это может быть PptFile
не был назначен? Это может произойти, только если вызов pptApp.Presentations.Open()
терпит неудачу, и это вызвало бы исключение. Или я неправильно это понимаю? В настоящее время я не вижу ни одного сценария, в котором вы могли бы PptFile.SaveAs()
для которого PptFile
не был назначен.