republican 发表于 2010-9-22 09:16:00

无法处理一个 字符串 ,异常退出 [CODE]:-1073741819

本帖最后由 republican 于 2010-9-22 09:51 编辑

本BUG在08 R2(64Bit)系统下100%重现。

出错涉及UDF, _POP3.AU3.

出错猜想: 无法 Handle 包含特殊字符串的 变量。

出错涉及过程:(出错代码在第36行)

Func _Pop3Top($msg, $nb)
        ConsoleWrite($msg &"--------0"&@CRLF )
        If $pop3_IsAuth = 1 Then
                Local $ret
               
                ; Send Top
                $ret = TCPSend ($pop3_socket, "TOP " & $msg & " " & $nb & @CRLF)
                If @error Then
                        SetError($pop3_error_top_refused)
                        Return -1
                EndIf
                $ret = _Pop3WaitForOK()
                If @error Then
                        SetError($pop3_error_no_OK_response)
                        Return -1
                EndIf
               
                $ret = _WaitTcpResponse()
                If @error Then
                        SetError($pop3_error_no_TCP_response)
                        Return -1
                EndIf
                ConsoleWrite($msg &"--------1"&@CRLF )
                ; Downloading until final dot and cariage return.
                While Not StringRegExp($ret, "\r\n\.\r\n")
                        $ret = $ret & _WaitTcpResponse()
                        If @error Then
                                SetError($pop3_error_no_TCP_response)
                                Return -1
                        EndIf
                WEnd
                ConsoleWrite($msg &"--------OK"&@CRLF )
               
                MsgBox(0,"",$ret)

                Return $ret
               
        Else
                SetError($pop3_error_no_auth)
                Return -1
        EndIf
EndFunc   ;==>_Pop3Top


函数调用过程:

For $i = 1 To $uidl
        $Temp=StringRegExp($uidl[$i],'(\d+) (.*)',3)
        If UBound($Temp) = 2 Then
                $MyUID[$i]=$Temp
                $MyUID[$i]=$Temp
        Else
                $MyUID[$i]=$i
                $MyUID[$i]="ERROR"
        EndIf
Next
$MyUID="0"
$MyUID=$uidl
;~ IniWriteSection("MailDB.ini","UID",$MyUID,0)
$WebMailUIDX=IniReadSection("MailDBOld.ini","UID")
_ArrayDelete($WebMailUIDX, 1)
$Test=        _MyArrayContrast($MyUID,$WebMailUIDX)
If $Test <> -1 And $Test <> 0 Then
       
        MsgBox(0,"提示","您有"&$Test&"封新邮件!")
       
        For $i = $uidl To $uidl-$Test+1 Step -1

                $muti = _Pop3Top ($i, 1)

                MsgBox(0,"标题为",_MailDecode($muti))
        Next
EndIf


出错及排除过程;

1. 出错过程在 Return 一句。


2.到底是不是呢?测试一下,注销此句,结果没事了。


3.直接return不行,试试用二进制吧。好的,没问题。


4.我要的字符串,二进制可不行,转回字符串吧,结果再次出错了。


以上,我想说明的是,AU3可能无法 Handle 此字符串。

程序打包,用户名及密码已被删除,如果您是测试者,请PM我.


本问题应该在NT6 64bit 的系统下都能重现,在32bit系统下则随机出现,非常恼人。

35888894 发表于 2012-5-15 11:43:05

是的,在调用IE UDF的时候也会莫名出现这样的情况
页: [1]
查看完整版本: 无法处理一个 字符串 ,异常退出 [CODE]:-1073741819