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

C++ Discussion :

Comment récupérer les contacts outlook 2007 en C++ ?


Sujet :

C++

  1. #1
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut Comment récupérer les contacts outlook 2007 en C++ ?
    Bonjour,
    Actuellement en stage, je recherche les différentes façons d'accéder/récupérer des contacts outlook 2007.
    Après de nombreuses recherche sur le web, j'ai trouvé des solutions en C#/.net, mais rien de très précis en ce qui concerne le C++. Il semblerait qu'il y ai une possibilité de le faire avec les MFC mais rien de bien précis non plus.
    De plus j'ai cherché s'il n'existait pas une librairie permettant l'intéraction avec outlook, apparement non.
    C'est pourquoi je m'en remet à vous, si quelqu'un peut m'aider ou m'orienter, cela m'aiderais beaucoup.
    Merci.

  2. #2
    Membre éclairé
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Points : 764
    Points
    764
    Par défaut
    Il me semble que le formatage des données n'est pas très complexe...
    Pour accèder aux contacts, regarde dans ton PC, dans les répertoires dérivants de cette adresse:
    C:\Documents and Settings\NUM_D_UTILISATEUR\Application Data

  3. #3
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Je ne crois pas que ce soit comme cela que je doive y accéder. Je suis équipé de Visual Studio 2008 ainsi que du SDK OFFICE 2007.
    Apparement il y aurait une classe "Microsoft.Office.Interop.Outlook.Application" que l'on pourrait instancier et ainsi avoir accès à ces méthodes, dont celle qui permet de parcourir les contacts outlook.
    Le problème est que je ne connais pas les include pour accéder à cette classe et je n'arrive pas à l'instancier..
    Si quelqu'un peut m'aider...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il faut l'instancier avec COM/OLE.
    Un truc du genre:
    Code pseudo-C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    OleInitialize();
    CLSID clsid;
    ILInterfaceQueTuVeux *pIface;
    CLSIDFromString(OLESTR("Outlook.Application"), &clsid);
    CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_ILInterfaceQueTuVeux, (void**)&pIface);
     
    ... Bosser avec l'interface voulue et sans doute d'autres aussi
     
    pIface->Release();
    pIface = NULL;
    OleUninitialize();
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Après, selon les bibliothèques employées (MFC, Compiler COM Support...), tu peux avoir des classes qui permettent de gérer les interfaces COM sans trop te prendre la tête...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Ok, je vais essayé avec ça mais pour tout vous avouer, je ne connais rien au SDK et encore moin à Outlook, j'ai donc beaucoup de mal à comprendre ce que je doit faire..
    Merci de votre aide en tout cas!

  7. #7
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Rebonjour,
    J'ai eu des précisions sur la manière dont je devait procéder, en effet, je dois utiliser les MFC afin de récupérer les contacts, les calendriers et eventuellement les messages pour les stocker dans une base.
    Merci.

  8. #8
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Bon j'ai de nouveau un problème,
    Je souhaiterais déclarer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class OleInitClass {
    	public:
          OleInitClass() {
             OleInitialize(NULL);
          }
          ~OleInitClass() {
           OleUninitialize();
          }
       };
    Seulement cette déclaration nécessite un include de type msoutl.h pour les version < 2007. Impossible de trouver celui de la version 2007, il semblerait qu'un msoutl.olb devrait le remplacer mais cela ne marche pas.
    Si quelqu'un connait ce .h, merci.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne comprends pas en quoi cette déclaration de classe nécessite msoutl.h.
    La fonction OleInitialize() est déclarée dans <ole2.h>...

    Note: Le .olb s'utilise avec #import ou avec les assistants MFC, pas avec #include.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Effectivement, j'ai éssayé d'importer ce ole2.h, et j'obtient un message d'erreur me disant :
    fatal error C1083: Impossible d'ouvrir le fichier bibliothèque de types : 'c:\program files\microsoft sdks\windows\v6.0a\include\ole2.h' : Erreur lors du chargement de la bibliothèque/DLL du type. c
    De plus j'ai trouvé ceci sur internet :
    Comment utiliser un Modèle d'objet Outlook à partir de Visual C++ à l'aide d'une instruction import
    http://support.microsoft.com/kb/259298/fr

    Seulement ils utilisent des versions antérieurs de Outlook, sur la 2007, j'ai beau cherché un mso.dll, il n'y a rien.. La seule chose que j'ai trouvée est "msout.olb".

    J'ai également trouvé ceci :
    http://support.microsoft.com/kb/2206...d=2559&sid=490

    Mais rebelotte, aucun .h de type msoutl??.. Je ne sais donc pas quoi faire, j'ai scruté tout le dossier sdks/include ainsi que tout le dossier Microsof Office/Office12...

    Merci.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    ole2.h ne s'importe pas, il s'inclut.
    Par contre, le .olb s'utilise avec les assistants ou avec #import.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Oui, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #import "C:\Program Files\Microsoft Office\Office12\msoutl.olb"
    Apparement le import fonctionne mais après il me met plein d'erreur dans le code du .tlh qu'il génère avec le #import.

    Comment fonctionne ces assistants ? A quoi servent-ils ?

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les assistants MFC génèrent des classes qui facilitent l'utilisation des objets COM d'Office. Malheureusement, je ne m'en suis jamais servi.

    Quelles sont les erreurs que tu obtiens avec le tlh?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Des erreurs basique du style :
    Pas de type de retour pour cette fonction, Pas de déclaration pour cet objet, ou Spécificateur de type manquant etc...

    Je ne comprend pas du tout ce qui ce passe.

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Vérifie que ce n'est pas tout simplement un header qui manque: <windows.h>, <ole2.h>, etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    J'ai vérifié, apparement ça ne vien pas de la..

    Apparement, il y aurait des problèmes avec les #import, des comptages de références qui ne fonctionne pas avec les applications Office.

    Tout ce que je sais c'est que je dois utiliser les MFC... Je sais pas trop comment mais bon...

    Mais si dans un premier temps on pouvait me lister toutes les possibilitées de récupération des contacts outlook (même dans des autres langages que le C++) cela m'aiderait peut-être à comprendre 2-3 trucs...

    Pour le moment j'ai trouvé différentes méthodes d'automatisation de module outlook :
    Trois façons d'utiliser Automation à partir de Visual C++
    Il existe trois façons principales d'utiliser Automation : MFC, #import et C/C++ :
    • Avec MFC, utilisez Visual C++ ClassWizard pour générer des "classes wrapper " à partir des bibliothèques de types Microsoft Office. Ces classes, ainsi que d'autres classes MFC, telles que COleVariant, COleSafeArray et COleException, simplifient les tâches d'Automation. Cette méthode est généralement préférée aux autres, et la plupart des exemples de la Base de connaissances Microsoft utilisent MFC.
    • #import, une nouvelle directive qui est devenue disponible avec Visual C++ 5.0, crée des "pointeurs intelligents" VC++ à partir d'une bibliothèque de types spécifiée. Elle est très puissante, mais rarement conseillée en raison de problèmes de comptage des références qui se produisent généralement lorsqu'elle est utilisée avec les applications Microsoft Office.
    • L'automation C/C++ est bien plus difficile, mais parfois nécessaire pour éviter une surcharge avec MFC ou des problèmes avec #import. Vous travaillerez essentiellement avec des API telles que CoCreateInstance(), et des interfaces COM telles que IDispatch et IUnknown.

  17. #17
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    En fait ma question est :
    Comment puis-je utiliser le modèle objet de outlook avec C++ et MFC ?
    Quels include ? Comment ? etc...

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Utilisation des wrappers MFC sous Visual Studio 2005:
    1. Class View -> Add -> Class
    2. Dans la boîte de dialogue, sélectionner "class from ActiveX control"
    3. Dans la nouvelle boîte de dialogue, sélectionner dans la combobox "Microsoft Outlook 12.0 Object Library", puis cliquer sur le bouton ">>" (ou bien, sélectionne manuellement les classes et interfaces dont tu penses avoir besoin grâce à la doc du SDK outlook).
      • Si tu veux mettre tout dans le même fichier d'en-tête, change-le pour toutes les classes de la Listbox de droite (c'est long, le copier-coller peut être utile).
    4. Dans chaque fichier d'en-tête utilisé, mettre en commentaire la ligne contenant le #import, car elle est inutile.
    5. Et hop, chez moi, ce code compile et s'exécute correctement:
      Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      #include "Stdafx.h"
      #include "COleInit.hpp" //ma version de COleInit, mettre la tienne à la place
      #include "CApplication.h"
       
      void TestOutlook(void)
      {
      	FbtUtil::COleInit init; //ma version de COleInit, mettre la tienne à la place
      	CApplication app;
      	BOOL bOK = app.CreateDispatch(_T("Outlook.Application"));
      	if(bOK)
      	{
      		AfxMessageBox(_T("Application outlook créée"));
      		app.Quit();
      	}
      }

    NOTE: Par contre, je te conseille d'utiliser le Compiler COM Support à la place, car en C++ il sera plus efficace (et je pense, plus rapide) que les wrappers MFC (accès direct plutôt qu'accès par IDispatch).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Et bien écoute, merci bien pour toutes ces informations, je commence à comprendre un peu mieu le fonctionnement de tout ce bazar
    Je vais essayer tout ça et je te tient au courant.

    PS : Je suis sous VS2008 je ne pense pas que cela soit très différent mais bon on sait jamais.

  20. #20
    Membre habitué Avatar de SmOkEiSBaD
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2008
    Messages : 234
    Points : 127
    Points
    127
    Par défaut
    Comment puis-je trouver ma version de COleInit ?
    Cela doit surment être une question débile mais je découvre

    De plus au moment de la création de la classe j'ai :
    - Microsoft Office Outlook View Control <1.0>
    - Avec comme interface : IViewCtl
    - Microsoft.VisualStudio.OfficeTools.Controls.UnmanagedWrapper.dll <1.0>
    - Avec comme interface : IActiveXWrapper

    J'ai choisi Microsoft.VisualStudio... Je ne sais pas si c'est la bonne.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment récupérer les données dans contact sur une feuille excel?
    Par Granfred dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/01/2009, 15h02
  2. Réponses: 11
    Dernier message: 22/04/2008, 11h54
  3. Réponses: 2
    Dernier message: 22/08/2007, 12h46
  4. Réponses: 4
    Dernier message: 28/03/2007, 13h47
  5. [WebForms][2.0] Récupérer les contacts Outlook
    Par fix105 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 11/01/2007, 16h39

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