[已解决]为什么《AU3 DllCall》一书中的代码比较方式都是 ptr和== 呢?
本帖最后由 李岸 于 2014-5-26 14:29 编辑RT,虚心请教版主。
随便一段代码:
If Ptr($iResult) == Ptr($WAIT_IO_COMPLETION) Then
使用ptr比较有什么好处吗?我看也就是改成十六进制而已呀?
还有==只是数值比对,难道这里对大小写敏感?还是怎么样?
另外我的问题,可以用书中的Emall和pusofalse进行请教吗? 帮忙顶了{:face (84):} 汗 怎么老是来路不正确啥么的,谢谢楼上帮顶~ 测试以下代码:$var1 = 4294967295
$var2 = -1
If $var1 = $var2 Then
MsgBox(0, "1", $var1 & " equals to " & $var2)
EndIf
If Ptr($var1) = Ptr($var2) Then
MsgBox(0, "2", "Ptr(" & $var1 & ") equals to Ptr(" & $var2 & ").")
EndIf {:face (327):} 测试以下代码:
pusofalse 发表于 2014-5-21 20:58 http://www.autoitx.com/images/common/back.gif
谢谢老师的回答,我很认真的测试和试图理解其用意.单一段代码,说实话理解空间蛮大的.
单这个代码来说,我想出最靠谱的解释是:
可以进行无符号的比对.我文化程度不高,大概是绝对值的意思吧.
========================================
那嵌套到我的问题上进行理解的话,难道是说某些API的返回值有可能是负数?而它在AU3上,常量的定义数据类型与返回值不符.
============================================
换句话说,可能有些函数返回的值是有符号数,而常量上的定义是十六进制.ptr的作用是单位换算?
pusofalse老师我理解的对吗? 回复 6# 李岸
nice,正是这个意思。 AU3中的数默认为“有符号数”,例如32位数0xFFFFFFFF实际被解析器解析为-1,而非4294967295,而API的返回值可能是一个无符号数。使用If Ptr(...) == Ptr(...)这样的句式,目的就是为了比较不同符号的数。 回复李岸
nice,正是这个意思。 AU3中的数默认为“有符号数”,例如32位数0xFFFFFFFF实际被解析 ...
pusofalse 发表于 2014-5-21 22:38 http://www.autoitx.com/images/common/back.gif
感谢,理解了.哈哈哈~ 回复 7# pusofalse
那为什么要用“==” 只用“=”不可以么? 我看上面的例字中有的也是“=”如过转换成ptr后 不也就不存在大小写的区别了么 ?为什么还要用“==” 牛BBBBB,收藏下。
页:
[1]