找回密码
 加入
搜索
查看: 7140|回复: 9

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

  [复制链接]
发表于 2014-5-20 22:58:18 | 显示全部楼层 |阅读模式
本帖最后由 李岸 于 2014-5-26 14:29 编辑

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

另外我的问题,可以用书中的Emall和pusofalse进行请教吗?
发表于 2014-5-20 23:22:09 | 显示全部楼层
帮忙顶了
 楼主| 发表于 2014-5-20 23:26:48 | 显示全部楼层
汗 怎么老是来路不正确啥么的,谢谢楼上帮顶~
发表于 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
发表于 2014-5-21 21:04:53 | 显示全部楼层
 楼主| 发表于 2014-5-21 22:27:46 | 显示全部楼层
测试以下代码:
pusofalse 发表于 2014-5-21 20:58



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

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

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



    感谢,理解了.哈哈哈~
发表于 2014-5-27 08:50:08 | 显示全部楼层
回复 7# pusofalse


    那为什么要用“==” 只用“=”不可以么? 我看上面的例字中有的也是“=”  如过转换成ptr后 不也就不存在大小写的区别了么 ?为什么还要用“==”
发表于 2014-6-4 10:09:52 | 显示全部楼层
牛BBBBB,收藏下。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 21:52 , Processed in 0.090646 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表