yarsye 发表于 2011-7-7 11:24:28

seterror(0,0,0)的意义?

看到某位高手一直喜欢用这招必杀技 , 想学习,但是不是非常清楚他的用意,请看代码

        If ($bFound == True) Then
                return SetError(0,0,0)
        Else
                return SetError(1,0,1)
        EndIf

他的整个程序意在说明,如果bFound的值找到(true),就seterror为0,否则为1.为什么不这样

seterror(0)
seterror(1)
?

他这招优点在哪?

风行者 发表于 2011-7-7 12:02:04

其实这个问题看看帮助就能解决

SetError ( 错误码 [, 扩展值 [, 返回值]] )

daiyu116 发表于 2011-7-7 18:35:40

本帖最后由 daiyu116 于 2011-7-7 19:05 编辑

回复 1# yarsye

根据我的理解, SetError(0,0,0)中第二个参数@extended 在针对同一个error时意义更大。
举个例子。

出错,出错的原因可能是运行文件出错,也可能是打开文件出错,
那么这时候可以这么写:

if 出错 then
   if运行文件出错 then
      returnSetError(0,1)
   elseif 打开文件出错 then
      returnSetError(0,2)
   endif
endif

针对上面这个代码判断时就要这样写:
if @error=0 and @extened=1 then或者 if @error=0 and @extened=2 then

SetError(0,0,0) 或者 SetError(1,0,1) 或者 SetError(2,0,2) 中第三个参数的值如果和第一个@error参数值相同,那他完全是多余的,就不必特意写出来第三个参数。
所以对于1楼你贴出来的代码,我认为完全可以只写为

      If ($bFound == True) Then
                return SetError(0,0)
      Else
                return SetError(1,0)
      EndIf


因此,举例子如下:
出错(@error),出错的原因(@extended)可能是运行文件出错(想设置这个原因返回的值设置为3),也可能是打开文件出错(想设置这个原因返回的值设置为9)
那么这时候可以这么写:

if 出错 then
   if运行文件出错 then
         return SetError(0,1,3)
   elseif 打开文件出错 then
         return SetError(0,2,9)
   endif
endif

针对本例,后面判断的时候可以用下面的语句:
if @error=3   then或者 if @error=9   then
如果还有其他@error=3的情况,那么判断的时候要写成if @error=3 and @extended=1then

yarsye 发表于 2011-7-8 09:38:16

哇塞!详细透彻!清楚明了。谢谢

daiyu116 发表于 2011-7-8 13:55:17

本帖最后由 daiyu116 于 2011-7-8 13:57 编辑

回复 4# yarsye
呵呵,上面是我的看法,但也可能会有不同的看法啊。
另外,很多函数都会有返回值,所以要特别注意设置seterror的插入点~欢迎交流

yarsye 发表于 2011-7-14 10:29:34

回复 5# daiyu116


   非常感谢!
最近就在seterror这方面老是有困惑,最诡异的是 我定义了 Global $Error
$Error =ShellExecute(xx) 提示我不能给常量赋值 ,不知道$Error何时成为了常量。
想记录每做一步的返回值,如果出错也好知道在哪里出错了。

leon460 发表于 2011-7-14 16:18:41

呵呵,以后遇到这样的情况我会想起此贴的,感谢

yarsye 发表于 2011-7-22 16:42:13

Marking !!!

iori2882 发表于 2011-8-15 11:57:44

标记 以后备用 谢谢分享
页: [1]
查看完整版本: seterror(0,0,0)的意义?