声明:
此文撰写的目的在于探讨Domino开发技术,并尽量回避开发过程中有可能犯下的错误,请勿将其用于不适当的场合,否则后果自负!
前两天碰到一个奇怪的问题,某段代码一执行,就会立即触发NSD错误。如果代码运行在客户端,则客户端会被强制关闭。如果代码运行在服务器,则整个Domino服务器会立即瘫痪并被强制关闭。当时通过Lotusscript调试,发现在如下函数退出时程序崩溃:
Function getVariant() as Variant dim vrnTemp as Variant ... End Function琢磨了半天,恍然大悟,忘了写返回值(-_-)b
更改后代码如下:
Function getVariant() as Variant dim vrnTemp as Variant ... getVariant = vrnTemp ' 给函数赋返回值。这句是原来忘了写的。 End Function
这样一来问题就消失了,我也一度认为Variant型的函数必须赋返值,可是今天想再研究一下这问题时,却发现问题无法重现了。莫非是原来的推断有误?更深入的研究证实了这一点。原来,问题的产生的源头是另一个函数。
Function wrongFunction() as Variant ... ' vrnSource is a string array vrnSource = arrayappend(vrnSource, getVariant()) ' 其实是一执行到这里就NSD ... End Function实测结果表明,当使用ArrayAppend()方法时,如果第二个参数是Nothing,则会立即触发NSD错误。按照这个思路,完全可以写出类似以下的代码。
Dim v As Variantv = Split ( "" , "" )v = Arrayappend(v, Nothing )当代码执行时,便会触发NSD错误。如果类似有问题的代码放置服务器上,又设置为定时代理……后果不堪设想。
PS:经测试,如果将第二个参数Nothing换为Null或者Empty,则不会出现类似的问题。