C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Закрывается Outlook, Как избежать этого
andylit
Отправлено: 18.10.2006, 05:53


Ученик-кочегар

Группа: Участник
Сообщений: 15



В проекте использую компонент для работы с Outlook. Все нормально. Что хотел — делаю, но при закрытии программы автоматически закрывается и Outlook. Вроде в проекте авто отключено:
[CODE]
AutoQuit = false;
ConnectKind = ckNewInstance;
[CODE]
Как этого избежать?

gvg
Отправлено: 18.10.2006, 12:43


Машинист паровоза

Группа: Участник
Сообщений: 222



У меня была та же история (билдер5). Как только перестал использовать компоненты, работая напрямую — все стало нормально.
andylit
Отправлено: 18.10.2006, 12:59


Ученик-кочегар

Группа: Участник
Сообщений: 15



Код при этом сильно меняется? Никогда не работал напрямую. Если можете сбросьте примерчик.
Чем хорошо через компонент, то там можно через VB видеть разного рода классы и их свойства... А напрямую нужна какая-то дока, наверно...
gvg
Отправлено: 18.10.2006, 14:41


Машинист паровоза

Группа: Участник
Сообщений: 222



Вот подключение
CODE
bool __fastcall TveForm::ConnectToOutlook()
{
 bool ret = false;
 char *AppProgID = "Outlook.Application";
 ServerIsRunning = false;
 Log.Add( "[Подключение к Outlook]" );
 try
 {
   App = Variant::GetActiveObject( AppProgID );
   ServerIsRunning = true;
   ret = true;
 }
 catch(...)
 {
   try
   {
     App = Variant::CreateObject( AppProgID );
     ret = true;
   }
   catch(...)
   {
     MessError( "Возможно, Outlook не установлен..." );
     Log.Add( "\t- ошибка подключения!" );
   }
 }
 if( ret )
 {
   NS = App.OleFunction( "GetNamespace", "MAPI" ); //"WideString( "MAPI" ));
   Log.Add( "[Поиск папок в Outlook]" );
   ret = PT.FindFolders( NS );
   if( !ret )
   {
     MessError( "Найдены не все папки Outlook!" );
     Log.Add( "\t- не все папки найдены!" );
   }
 }
 return( ret );
}

А это пример работы
CODE

   if( FilesExistsAS( mask ))
   {
     WideString msgname;
     Variant mi;
     Variant fldr = ns.OleFunction( "GetDefaultFolder", 4 ); //olFolderOutbox );
     veForm->Log.Add( "Отправка файлов..." );
     if( fldr.VInteger )
     {
       mi = fldr.OlePropertyGet( "Items" ).OleFunction( "Add" );
       if( mi.VInteger )
       {
         int attr = faReadOnly | faHidden | faSysFile | faArchive | faAnyFile;
         TSearchRec F;
         if( !FindFirst( mask, attr, F )) do
         {
           if( !( F.Attr & faDirectory ))
           {
             veForm->Log.Add( AnsiString( "\tотправляем " ) + F.Name );
             // добавляем в сообщение
             mi.OlePropertyGet( "Attachments" ).OleProcedure( "Add", tl->oipath + F.Name );
                ....
                ....
            }
         } while( !FindNext( F ));
         FindClose( F );
         // отправляем в Outlook
         mi.OlePropertySet( "To", WideString( tl->orcvr ).c_bstr());
         mi.OleProcedure( "Save" );
         mi.OleProcedure( "Send" );
       }
     }
   }

отключение
CODE

void __fastcall TveForm::DisconnectFromOutlook()
{
 if( !ServerIsRunning )
   App.OleProcedure( "Quit" );
}
andylit
Отправлено: 25.10.2006, 04:28


Ученик-кочегар

Группа: Участник
Сообщений: 15



Спасибо gvg.
Загрузили так, что сразу попробовать нет времени.

Вернуться в Технологии COM/DCOM, ActiveX