Inno setup 如何检查Inno Setup Pascal脚本中的对象是否为空?

Inno setup 如何检查Inno Setup Pascal脚本中的对象是否为空?,inno-setup,pascalscript,Inno Setup,Pascalscript,我正在使用Inno setup studio编写一个pascal函数,该函数检查对象是否为null并执行某些操作 到目前为止,我已经: XMLDocument.setProperty('SelectionLanguage', 'XPath'); XMLNode := XMLDocument.selectSingleNode(APath); if (XMLNode=Null) then begin //do stuff End Else //do other stuff End 但我不断得到无效

我正在使用Inno setup studio编写一个pascal函数,该函数检查对象是否为null并执行某些操作

到目前为止,我已经:

XMLDocument.setProperty('SelectionLanguage', 'XPath');
XMLNode := XMLDocument.selectSingleNode(APath);
if (XMLNode=Null) then
begin
//do stuff
End
Else
//do other stuff
End
但我不断得到
无效的变量操作
错误


如何检查Inno Setup Pascal脚本代码中的对象是否为空?

要检查变量是否为空,请使用以下函数:

if VarIsNull(XMLNode) then
然而,在您的情况下,问题稍微复杂一些。该方法始终返回一个类型的变量,其实际数据指针指向找到的XML DOM节点,如果找不到此类节点,则返回
nil
。在Delphi(编写Inno Setup Pascal脚本的语言)中,有一个函数也涵盖了这种情况。不幸的是,它没有在Inno安装程序中发布。但是,您可以使用以下语句测试此情况:

if (IDispatch(XMLNode) = nil) then
这将从返回的变量中获取数据,并测试
nil



Martijn Laan在中的Unicode版本的Inno Setup中添加了
VarIsClear
函数,因此自Inno Setup 5.5.6以来,您可以使用
VarIsClear
代替上述hack。

未分配对象指的是
nil
NULL
是一个返回
NULL
变量的函数。所以你想写
if(XMLNode=nil)然后写
,或者
如果没有赋值(XMLNode),那么写
哪一个做得一样。@TLama如果我把代码改成你建议的,在编译代码时,我会得到
键入Mistmatch
。好吧,让我们先告诉我们你使用的编译器是什么。FreePascal、Delphi或其他什么?请编辑您的问题标签。@TLama我正在使用Inno安装编译器。我将编辑我的问题,使其更有用现在我想你预见到我的问题。根据selectSingleNode返回空值。但出于某种原因,如果xpath节点不存在,我的程序实际上只是没有赋值,因此我实际上需要
VarIsEmpty
,但这是我所问问题的正确答案。谢谢不客气!嗯,问题有点深。
selectSingleNode
调用(使用后期绑定时)返回的值始终为
varDispatch
类型(即使找不到该节点)。使用
varisnll
VarIsEmpty
进行测试仍将失败。您需要访问该
varDispatch
变量值数据,并检查其
nil
。查看更新。感谢更新。在我的情况下,如果我改为使用IDispatch,我会得到
类型不匹配
,但如果我使用
VarIsEmpty
,它实际上可以工作。i、 在我的应用程序中,如果元素不存在,我插入元素,否则我更新并显示不同的消息框。而且
VarieSempty
似乎很有效。谢谢你提供的信息,我会进一步调查的,这很奇怪<对于这种情况,代码>变量集
也不应在ANSI Inno设置中工作。返回的类型仍然是
varDispatch
(在v.5.5.4(a)中测试)
VarIsEmpty
函数应仅在变量类型为
varEmpty
时进行测试(该类型不是,因此
VarIsEmpty
应返回False,但不会返回False)。关于类型不匹配,
as
casting存在一些问题,如果您编写
if(IDispatch(XMLNode)=nil),那么它就会按照预期工作(这是正确的方法)。是
如果(IDispatch(XMLNode)=nil),那么它就会工作。如果你建议这样做,我会坚持下去。奇怪的是VarIsEmpty能工作?可能是程序中的错误?