李岸 发表于 2014-5-20 22:58:18

[已解决]为什么《AU3 DllCall》一书中的代码比较方式都是 ptr和== 呢?

本帖最后由 李岸 于 2014-5-26 14:29 编辑

RT,虚心请教版主。
随便一段代码:
If Ptr($iResult) == Ptr($WAIT_IO_COMPLETION) Then
使用ptr比较有什么好处吗?我看也就是改成十六进制而已呀?
还有==只是数值比对,难道这里对大小写敏感?还是怎么样?

另外我的问题,可以用书中的Emall和pusofalse进行请教吗?

lxwlxwayy 发表于 2014-5-20 23:22:09

帮忙顶了{:face (84):}

李岸 发表于 2014-5-20 23:26:48

汗 怎么老是来路不正确啥么的,谢谢楼上帮顶~

pusofalse 发表于 2014-5-21 20:58:34

测试以下代码:$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

joyran 发表于 2014-5-21 21:04:53

{:face (327):}

李岸 发表于 2014-5-21 22:27:46

测试以下代码:
pusofalse 发表于 2014-5-21 20:58 http://www.autoitx.com/images/common/back.gif


    谢谢老师的回答,我很认真的测试和试图理解其用意.单一段代码,说实话理解空间蛮大的.
单这个代码来说,我想出最靠谱的解释是:

可以进行无符号的比对.我文化程度不高,大概是绝对值的意思吧.
========================================
那嵌套到我的问题上进行理解的话,难道是说某些API的返回值有可能是负数?而它在AU3上,常量的定义数据类型与返回值不符.
============================================
换句话说,可能有些函数返回的值是有符号数,而常量上的定义是十六进制.ptr的作用是单位换算?

pusofalse老师我理解的对吗?

pusofalse 发表于 2014-5-21 22:38:00

回复 6# 李岸


    nice,正是这个意思。 AU3中的数默认为“有符号数”,例如32位数0xFFFFFFFF实际被解析器解析为-1,而非4294967295,而API的返回值可能是一个无符号数。使用If Ptr(...) == Ptr(...)这样的句式,目的就是为了比较不同符号的数。

李岸 发表于 2014-5-21 22:55:30

回复李岸


    nice,正是这个意思。 AU3中的数默认为“有符号数”,例如32位数0xFFFFFFFF实际被解析 ...
pusofalse 发表于 2014-5-21 22:38 http://www.autoitx.com/images/common/back.gif


    感谢,理解了.哈哈哈~

cumtljj 发表于 2014-5-27 08:50:08

回复 7# pusofalse


    那为什么要用“==” 只用“=”不可以么? 我看上面的例字中有的也是“=”如过转换成ptr后 不也就不存在大小写的区别了么 ?为什么还要用“==”

diandiand163 发表于 2014-6-4 10:09:52

牛BBBBB,收藏下。
页: [1]
查看完整版本: [已解决]为什么《AU3 DllCall》一书中的代码比较方式都是 ptr和== 呢?