cumtljj 发表于 2014-6-15 17:44:40

Seterror函数的困惑 望各位解答谢谢


Local $hWnd = _GetForegroundWindow()
If @error Then
        ; 前台窗口获取失败。
Else
        WinFlash($hWnd) ; 闪烁窗口。
EndIf

; 获取当前前台窗口的句柄。
Func _GetForegroundWindow()
        Local $iResult = DllCall("User32.dll", "hwnd", "GetForegroundWindow")

        Return SetError($iResult = 0, 0, $iResult)
EndFunc        ;==>_GetForegroundWindow

这是P大教材里的一算代码,有几点以后望各位帮忙解答 谢谢
1 SetError($iResult = 0, 0, $iResult) 和SetError( 0, 0, $iResult) 有何不同 教程里有很多的地方都是类似前者的方式 为什么这样呢?有何意义?
2 如一中的$iResult = 0 ,也就是说这里已经将 $iResult)赋值为0了 后面让seterror返回$iResult 那按理说返回值应该是0啊,但实际测试发现还是原来的值 这又是为何?
3 自定义函数的返回值通过seterror设置了@error的值=0了 那这样的话 回到前面的 if @error 应该执行的是then 后面的语句啊 但是为什么执行的却是else后的语句呢?

cumtljj 发表于 2014-6-15 17:57:13

自己顶上去

joyran 发表于 2014-6-15 18:34:25

{:face (327):}顶楼主

seniors 发表于 2014-6-15 19:25:03

SetError($iResult = 0, 0, $iResult)
$iResult = 0不是赋值,是$iResult和0比较,如果相等则为true,不相等则为false

cumtljj 发表于 2014-6-15 20:02:52

回复 4# seniors


    嗯谢谢 唉自己琢磨真的是太费劲了 要是有个老师就好了

gto250 发表于 2014-6-15 20:11:58

多看看帮助!
SetError ( code [, extended = 0 [, return value]] )

SetError($iResult = 0, 0, $iResult) 和SetError( 0, 0, $iResult)有什么不同?
第一个返回的@error可能是TRUE也可能是False,就看$iResult 是否等于 0,而第二个直接设置@error=0

你理解这个以后就不会提出后面的两个问题了

cumtljj 发表于 2014-6-15 20:23:24

回复 6# gto250


    问题是帮助里没有第一个问题的答案我才会有了第二个问题的 要是有说$iResult = 0 是判断不是赋值我也不会发帖问了

skyfree 发表于 2014-6-15 21:42:50

SetError($iResult = 0, 0, $iResult)中的$iResult = 0不是赋值操作,而是判断是否相等。

xms77 发表于 2014-6-15 21:42:53

学习了,我怎么好像都没有见过SetError($iResult = 0, 0, $iResult) 的实例。

seniors 发表于 2014-6-16 07:17:57

回复 9# xms77
不是没有实例,而是一般的编程中,好多忽略了错误的判断,所以说SetError用的比较少

函数申明时,
如YourFunc($x = 0,$y=0){
具体语句}
此时的($x = 0,$y=0)是设置$x,$y的默认值

函数调用时,
如YourFunc($foo = 0,$bar=0)
则是把$foo = 0这个判断的结果赋值给$x
把$bar = 0这个判断的结果赋值给$y

f4李文杨 发表于 2014-6-16 17:19:04

楼上说的很精P{:face (303):}
页: [1]
查看完整版本: Seterror函数的困惑 望各位解答谢谢