IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

PB : Automation d'Outlook à partir d'un Thread.


Sujet :

MFC

  1. #1
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut PB : Automation d'Outlook à partir d'un Thread.
    Salut,

    j'utilise dans mon programme l'automation pour outlook.
    J'ai une classe CSendEmail dont la méthode execute() permet d'envoyer un mail.
    Si je fait normalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CSendEmail monEmail;
    ...
    monEmail.execute();
    Tout fonctionne parfaitement, le mail est envoyé.

    Seulement voilà, pour une raison qui m'est inconnu, si j'exécute la même chose dans un thread ca ne veut plus fonctionner...

    L'erreur provient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CSendEmail::execute()
    {
    ...
    _Application olApp;
       COleException e;
       if(!olApp.CreateDispatch("Outlook.Application", &e)) {
          CString str;
          str.Format("CreateDispatch() failed w/error 0x%08lx", e.m_sc);
          AfxMessageBox(str, MB_SETFOREGROUND);
          return false;
       }
    ...
    }
    "CreateDispatch" ne fonctionne plus... et j'obtiens ca : "CreateDispatch() failed w/error 0x800401f0"

    Quelqu'un pourrait m'expliquer et me sortir de l'ignorance ?

    Merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Dans le menu outils de VC++ : lance Errlook.
    Entre ton code d'erreur 0x800401f0 et tu obtiens:
    CoInitialize n'a pas été appelé.

  3. #3
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Merci pour m'avoir fait découvrir cette fonction .

    Et donc... est-ce que quelqu'un peut me dire pourquoi CoInitialize n'est pas appelé quand j'exécute ca dans un thread alors qu'il l'est sinon ???

  4. #4
    Membre régulier Avatar de loupdeau
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 125
    Points : 79
    Points
    79
    Par défaut
    Problème résolu.

    J'utilise le code trouvé sur MSDN. Avec entre autre la classe OleInitClass permettant l'initialisation automatique au début de l'application et la désinitialisation à la fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Ole-initialization class.
    class OleInitClass {
     public:
     OleInitClass() {
        OleInitialize(NULL);
     }
     ~OleInitClass() {
        OleUninitialize();
     }
    };
    // This global class calls OleInitialize() at
    // application startup, and calls OleUninitialize()
    // at application exit...
    OleInitClass g_OleInitClass;
    en placant OleInitClass g_OleInitClass; à l'intérieur de mon Thread ca fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer un message avec Outlook à partir d'access
    Par pilotcoater dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 13/03/2006, 00h26
  2. Contact Outlook à partir d'Excel
    Par Memes dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/12/2005, 11h33
  3. Afficher carnet d'adresses d'Outlook à partir d'ACCESS (VBA)
    Par jean-michel lévêque dans le forum Access
    Réponses: 1
    Dernier message: 19/12/2005, 16h30
  4. Réponses: 2
    Dernier message: 03/06/2005, 10h19
  5. Réponses: 3
    Dernier message: 17/02/2005, 08h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo