本帖最后由 CHEARV 于 2016-4-20 17:17 编辑
最近发现一个问题,我编写的程序用32位编译运行正常,用64位编译运行就不正常。经过反复测试,终于发现了问题所在,原来版本不一致,部分自定义函数会出错,看下面的例子。
这里有两段代码,分别编译成两个程序A和B。如果版本相同,都为32位,或者都为64位,则运行正常。 如果A为32位,B为64位,或者A为64位,B为32位,则自定义函数_GUICtrlTreeView_GetText返回值会出错。
代码A:GUICreate("版本不一致的兼容性测试", 400, 300)
$idTreeView = GUICtrlCreateTreeView(2, 2, 396, 268);
GUISetState(@SW_SHOW)
GUICtrlCreateTreeViewItem("测试文字", $idTreeview)
Do
Until GUIGetMsg() = -3
GUIDelete()
代码B#include <GuiTreeView.au3>
$s = "32"
If @AutoItX64 Then $s = "64"
$hTreeView32 = ControlGetHandle("版本不一致的兼容性测试", "", "SysTreeView321")
$sReturn = _GUICtrlTreeView_GetText($hTreeView32)
MsgBox(4096,$s & "位运行结果","@error值: " & @error & @CRLF & "返回值: " & $sReturn)
我是在WIN10 64位下测试的,AU3版本为3.3.14.2。
例如,A程序为64位版本,B程序64位的返回值正确,32位返回值为空。
如果在系统中同时需要操作32位和64位的程序,则容易出错。不知道这算不算是个BUG。 |