Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2015, 13:07   #1
mens-evgenij
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 11
По умолчанию Access violation при закрытии Outlook

Добрый день. Пытаюсь реализовать задачу (c++ builder). Необходимо при нажатии кнопки в форме вызвать Oulook с заполненными полями (от кого, кому, текст письма и тд.) Все работает нормально, но если закрыть почтовик и вызвать его повторно, то вылетает ошибка Access violation at address 6B56D7E1. Read of address 6B56D7E1.

Код:
void __fastcall TFCheckTimeActual::m_ACT_send_letterExecute(
      TObject *Sender)
{
    AnsiString subj = "---";
    AnsiString namereport = m_dm->m_Q_mainEMP_NAME->AsString;
    AnsiString Name = m_dm->m_Q_mainEMP_NAME->AsString;
    AnsiString Addr = m_dm->m_Q_mainUSER_NAME->AsString;
    AnsiString body = "---"
   //TMLParams params;
    int m_sq_id = 0;
    m_sq_id = m_dm->FillTmpReportParamValues(m_MLDBG_main, "ID", 0);

    TMailSenderMAPI *m = new TMailSenderMAPI();
    m_TSRC_rep->CreateObject();
    try
    {    
        m_TSRC_rep->ReportImpl->Load("REP_FOR_DLA_NEW",stDatabase);
        m_TSRC_rep->ReportImpl->CanPrepare = true;
        m_TSRC_rep->ReportImpl->CanPrint = true;
        m_TSRC_rep->ReportImpl->CanSave = true;
        m_TSRC_rep->ReportImpl->CanDesign = false;
        m_TSRC_rep->ParamsImpl->SetParam("SQ_ID",m_sq_id);
        m_TSRC_rep->ReportImpl->Prepare();
        m_TSRC_rep->ReportImpl->SavePrepared("C:\\Temp\\1.fp3");
        
        //Заполнение полей
        m->SetSubject(subj);
        m->SetBody(body);
        m->SetNameReport(namereport);
        m->AddRecep(Name,Addr);
        
        //Отправка сообщения
        m->Send();
        
    }
    __finally
    {
      m_TSRC_rep->DestroyObject();
      delete m;
    }
Код:
void __fastcall TMailSenderMAPI::Send()
{
        TMapiMessage MapiMessage;
        TMapiRecipDesc SenderDesc;
        TMapiRecipDesc RecipDesc;
        TMapiFileDesc Files;

        LPLHANDLE lhSession;

        memset((void*)&SenderDesc,'\0',sizeof(SenderDesc));
        SenderDesc.ulRecipClass = MAPI_TO;

        RecipDesc.ulReserved = 0;
        RecipDesc.ulRecipClass = MAPI_TO;
        RecipDesc.lpszName =recepn.c_str();
        RecipDesc.lpszAddress =  recepa.c_str();
        RecipDesc.ulEIDSize = 0;
        RecipDesc.lpEntryID = NULL;

        Files.ulReserved = 0;
        Files.flFlags = 0;
        Files.nPosition = -1;
        Files.lpszPathName ="c:\\temp\\1.fp3";
        Files.lpszFileName =namereport.c_str();
        Files.lpFileType = NULL;

        MapiMessage.ulReserved = 0;
        MapiMessage.lpszSubject = psubj.c_str();
        MapiMessage.lpszNoteText = pbody.c_str();
        MapiMessage.lpszMessageType = NULL;
        MapiMessage.lpszDateReceived = NULL;
        MapiMessage.lpszConversationID = NULL;
        MapiMessage.flFlags = 0;
        MapiMessage.lpOriginator = &SenderDesc;
        MapiMessage.nRecipCount = 1;
        MapiMessage.lpRecips = &RecipDesc;
        MapiMessage.nFileCount = 1;
        MapiMessage.lpFiles = &Files;

        LHANDLE lhSession;

        MapiLogOn((ULONG)Application->Handle, 0, 0, MAPI_NEW_SESSION | MAPI_LOGON_UI, 0, &(UINT)lhSession);
        int nError = MapiSendMail(0, (ULONG)Application->Handle, MapiMessage, MAPI_DIALOG, 0);
        MapiLogOff(lhSession, 0, 0, 0);
}
mens-evgenij вне форума Ответить с цитированием
Старый 02.09.2015, 13:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А на каком операторе? На какой строке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.09.2015, 13:23   #3
mens-evgenij
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 11
По умолчанию

Выделена строка после m->Send();
mens-evgenij вне форума Ответить с цитированием
Старый 02.09.2015, 14:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так не скажу... Отладку надо делать и смотреть, может какой-то объект не создался второй раз.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.09.2015, 14:39   #5
mens-evgenij
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну так не скажу... Отладку надо делать и смотреть, может какой-то объект не создался второй раз.
Ошибка именно при закрытии outlook (а точнее письма). Причем если outlook заранее запущен, то письмо можно создавать и закрывать без ошибки
mens-evgenij вне форума Ответить с цитированием
Старый 02.09.2015, 14:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У-у-ух ты... Не зря его Аутглюком кличут. Тут я пас, ибо письма отправляю через Лотус. У меня как бы посерьезней программка чем оутлук. Соболезную.
Значит запускай его перед отправкой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
access violation при сложении AnsiString woojin Общие вопросы Delphi 6 06.03.2014 14:18
Access Violation при .Create.BitMap YaMolekula Общие вопросы Delphi 1 28.05.2011 13:42
Access Violation при закрытии формы с динамическими объектами Adonidi Общие вопросы Delphi 3 20.11.2010 20:34
Access violation при выполнении Bernarditto C++ Builder 5 04.11.2010 14:25
access violation при создании обьекта goog Общие вопросы Delphi 12 11.01.2009 20:33