Страница: 1 |
Страница: 1 |
Вопрос: Как очистить память(буфер) переменной
Добавлено: 24.08.06 13:23
Автор вопроса: Strike1984 | ICQ: 247188203
Ниже я открывал тему Ошибка 457 для listview, но поэксперементировав пришел к выводу, что ошибка происходит из-за того что данные которые приходят в listview, при повторном нажатии кнопки для получения информации, удваиваются, или берется вставляется только то значение которое в перменной(использовал вывод в MsgBox). Далее приведу кусочки кода. Как обнулять переменные, которые висят в памяти, при повторном нажатии, чтобы программа работала корректно?
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Static intMessages As Integer
Static intCurrentMessage As Integer
Static strBuffer As String
Winsock1.GetData strData
Debug.Print strData
If Left$(strData, 1) = "+" Or m_State = POP3_RETR Then
Select Case m_State
Case POP3_Connect
intMessages = 0
m_State = POP3_USER
Winsock1.SendData "USER " & txtUserName & vbCrLf
Debug.Print "USER " & txtUserName
Case POP3_USER
m_State = POP3_PASS
Winsock1.SendData "PASS " & txtPassword & vbCrLf
Debug.Print "PASS " & txtPassword
Case POP3_PASS
m_State = POP3_STAT
Winsock1.SendData "STAT" & vbCrLf
Debug.Print "STAT"
Case POP3_STAT
intMessages = CInt(Mid$(strData, 5, _
InStr(5, strData, " ") - 5))
If intMessages > 0 Then
m_State = POP3_RETR
intCurrentMessage = intCurrentMessage + 1
Winsock1.SendData "RETR 1" & vbCrLf
Debug.Print "RETR 1"
Else
m_State = POP3_QUIT
Winsock1.SendData "QUIT" & vbCrLf
Debug.Print "QUIT"
MsgBox "You have not mail.", vbInformation
End If
Case POP3_RETR
strBuffer = strBuffer & strData
If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
Set m_oMessage = New CMessage
m_oMessage.CreateFromText strBuffer
m_colMessages.Add m_oMessage, m_oMessage.MessageID
Сюда вставлял MsgBox, отсюда начинаются загоны
Set m_oMessage = Nothing
strBuffer = ""
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
Winsock1.SendData "QUIT" & vbCrLf
Debug.Print "QUIT"
Else
intCurrentMessage = intCurrentMessage + 1
m_State = POP3_RETR
Winsock1.SendData "RETR " & _
CStr(intCurrentMessage) & vbCrLf
Debug.Print "RETR " & intCurrentMessage
End If
End If
Case POP3_QUIT
Winsock1.Close
Call ListMessages
End Select
Else
Winsock1.Close
MsgBox "POP3 Error: " & strData, _
vbExclamation, "POP3 Error"
End If
End Sub
Public Sub CreateFromText(strMessage As String)
Dim intPosA As Integer
Dim vHeaders As Variant
Dim vField As Variant
Dim strHeader As String
Dim strHeaderName As String
Dim strHeaderValue As String
intPosA = InStr(1, strMessage, vbCrLf & vbCrLf)
If intPosA Then
m_strHeaders = Left$(strMessage, intPosA - 1)
m_strMessageBody = Right$(strMessage, Len(strMessage) - intPosA - 3)
m_strMessageText = strMessage
Else
Err.Raise vbObjectError + 512 + 101, "CMessage.CreateFromText", _
"Invalid message format"
Exit Sub
End If
vHeaders = Split(m_strHeaders, vbCrLf)
For Each vField In vHeaders
strHeader = CStr(vField)
intPosA = InStr(1, strHeader, ":")
If intPosA Then
strHeaderName = LCase(Left$(strHeader, intPosA - 1))
Else
strHeaderName = ""
End If
strHeaderValue = Trim$(Right$(strHeader, Len(strHeader) - intPosA))
Select Case strHeaderName
Case "return-path"
m_strReturnPath = strHeaderValue
Case "received"
m_strReceived = strHeaderValue
Case "from"
m_strFrom = strHeaderValue
немного вырезал лишнего, те же case
End Select
Next
End Sub
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 24.08.06 14:47
1. Не использовать Static
2.
intMessages = 0
strBuffer = vbNullString
3. Нах весь этот код?
4. Глюк наверняка не в этом.
Номер ответа: 2
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #2
Добавлено: 27.08.06 16:21
Тупой вопрос - чем отличается Static от Dim?
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 27.08.06 17:48
Static - статическая переменая, сохраняет свое состояние между вызовами процедуры. Не рекомендуемая мною к использованию штука.
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 27.08.06 20:32
ну если бы только тобой