Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Проблемма с Outlook XP


Автор: winged 12.5.2006, 10:42
Имеем некую программу, которая вызывает Оутлук, создает письма, отправляет по известным адресам... но вот возникла проблемма, если работаем в Win2k and MS Outlook 97 - то все просто сказка...
А если работаем под WinXP and MS Outlook XP - то имеем неприятный момент:
когда происходит отправка множества писем, программа пытается закрыть оутлук, но тот остается в памяти... соответственно в итоге их становится все больше и больше - пока не глохнет все нафиг
Есть подозрение что 
Код

Function Mail_To_Consumers( _
res = True
Set jOutlook = CreateObject("Outlook.Application")
If jOutlook Is Nothing Then
    Mail_To_Consumers = Show_Message(True, errNoMAPIsession)
    Exit Function
End If
Set jOutlookMsg = jOutlook.CreateItem(0)
Set_Window OnTop:=False
With jOutlookMsg
    .Body = Mess_Body
    .Subject = "Текст темы"
    .Importance = Get_Priority_Id(Priority)
    If Not (jOutlookAttach Is Nothing) Then
        jOutlookAttach.DisplayName = Display_Name()
    End If
    For i = 1 To cCons_Aggr.Count
        With cCons_Aggr.Item(i)
            If Presented(.Cons_Mail_Addr) Then
                Set jOutlookRecip = _
                        jOutlookMsg.Recipients.Add(.Cons_Mail_Addr)
            End If
        End With
    Next i
    jOutlookMsg.sentonbehalfofname = sUSER_Mail
            .Save
            .Display
            Set_Window OnTop:=True
            .Send
    End If
End With

jOutlook.quit
Set joutlook = Nothing

Mail_To_Consumers = res
Exit Function
res = False
Resume Next
End Function

Где-то кто-то обмолвился что просто joutlook.quit не достаточно... - но вот более подробной информации по етому поводу не нашел...

Может тут умные люди подскажут?   

Автор: Akina 12.5.2006, 12:52
В VB6 нет функций/процедур с именами Trace, Set_Nothing... посему что Вы имеете в виду - понять в принципе невозможно.

Переформулируйте вопрос исходя из постулата, что читающие НИЧЕГО не знают о Вашем коде и не обладают телепатическими способностями. 

Автор: winged 12.5.2006, 13:15
Понятно что так не лучше, счас время появится - оформлю... 
Поправил, правда переменные не трогал, но все лишнее выкинул. 

Автор: Akina 12.5.2006, 15:03
Цитата(winged @  12.5.2006,  11:42 Найти цитируемый пост)
Где-то кто-то обмолвился что просто joutlook.quit не достаточно... - но вот более подробной информации по етому поводу не нашел...

Информация есть в описании функции CreaterObject. Из него следует что вместо 
Код
joutlook.quit 
должно быть
Код
joutlook.Application.Quit 
Set joutlook = Nothing
 

Автор: winged 12.5.2006, 15:21
Приношу извинения, невнимательно почистил, Set joutlook = nothing добавил, т.к есть в первоисточнике.
Изменение joutlook.quit на joutlook.application.quit ничего не дало. 

Автор: winged 12.5.2006, 15:52
Обращаю внимание, на то, что фактически в программе ошибки нету, поскольку несколько лет стабильно работало на Win2000 MS Outlook 97...
Проблеммы появились с переходом на WinXP MS Outlook XP...
Как выглядит это:
Стоит на отправку несколько десятков сообщений...
Запускаемся, поднимаем оутлук, создаем письмо, отправляем, закрываемся.
Запускаемся второй раз, создаем письмо, отправляемся, закрываемся.
Запускаемся третий раз, создаем письмо, отправляемся, закрываемся... опа а оутлук остался в памяти...
Запускаемся в четвертый раз, создаем письмо, отправляемся, закрываемся... опа уже 2 в памяти...
....
....
Запускаемся в 15 раз, создаем письмо, отправляемся, закрываемся... ой уже 13 в памяти оутлуков...
Запускамемся в 16 раз, получаем ошибку при работе с почтовой службой...

Вопрос как это обойти? Оптимизировать? Пофиксить?
Вроже и ошибок нет, и не работает.  smile  

Автор: Drema 12.5.2006, 17:33
Перед запуском новой копии нужно сделать паузу для выгрузки первой копии.
http://www.potolook.ru 

Автор: winged 15.5.2006, 14:01
А если не просто "паузу"...
Вот как тут сделать Set joutlook = Nothing только после того, как убедимся, что joutlook.Quit ?
Ктонибудь может подсказать? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)