'-- 编程过程中发现的问题.我把问题做了简化.
'-- 我的猜想:VB6的解释器和编译器的代码不同.(可能是微软的两组人分别完成的)
'****************************************
'*-- 在IDE中结果为 0 *
'*-- 编译成EXE结果为 1 *
'****************************************
'-- 应该算是个BUG吧!Option ExplicitDim Num As LongPrivate Sub Form_Load()
Dim r As Long
r = Num + GetNum
MsgBox "r = " & CStr(r), vbOKOnly + vbInformation, "r = Num + GetNum"
End
End SubPrivate Function GetNum() As Long
GetNum = Num
Num = Num + 1
End Function
'-- 我的猜想:VB6的解释器和编译器的代码不同.(可能是微软的两组人分别完成的)
'****************************************
'*-- 在IDE中结果为 0 *
'*-- 编译成EXE结果为 1 *
'****************************************
'-- 应该算是个BUG吧!Option ExplicitDim Num As LongPrivate Sub Form_Load()
Dim r As Long
r = Num + GetNum
MsgBox "r = " & CStr(r), vbOKOnly + vbInformation, "r = Num + GetNum"
End
End SubPrivate Function GetNum() As Long
GetNum = Num
Num = Num + 1
End Function
pe文件时将 GetNum 删除,直接以内联的方式将 GetNum中的代码
嵌入GetNum调用处,所以exe的结果为1
别的不想说了,自个儿琢磨一下执行顺序吧
个人觉得r=0比较合理.
如果把代码改成
r = GetNum + Num
那么运算结果就统一了.都是1.
这个有点像C中的(i++),但是VB在解释时认为是(i++),在编译时又认为是(++i)了.
我保证还原了全部的,调试过程中的窗口函数指针.
编译成EXE就没有任何问题了,不会再Crush.
看来VB的IDE还是解释的不够好.不能和EXE结果完全统一.
应该这么写!解释与编译的本质是什么?
Private Function GetNum() As Long
Num = Num + 1
GetNum = Num
End Function