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

Windows Discussion :

MSOEAPI.h et MSOE.dll : comment les linker ?


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut MSOEAPI.h et MSOE.dll : comment les linker ?
    Bonsoir,

    j'essaye d'utiliser la librairie msoeapi.h du sdk windows, pour pouvoir lire des emails via windows mail (car les comptes sont déjà configuré, toussa...).

    J'ai Visual Studio 2008, et je n'écris qu'une fonction simple, tiré des samples MSDN : http://msdn.microsoft.com/en-us/libr...41(VS.85).aspx


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include<initguid.h>
    #include <msoeapi.h>
    #include <mimeole.h>
    
    INT main()
    {
        IStoreFolder* pFolder = NULL;
      IStoreNamespace* pStore = NULL;
      IStream* pStream = NULL;
      FOLDERPROPS fprops = {0};
      MESSAGEPROPS mprops = {0};
      HENUMSTORE hFEnum = NULL;
      HENUMSTORE hMEnum = NULL;
    
      // Create an instance of an IStoreNamespace object.
      CoCreateInstance(
        CLSID_StoreNamespace,   // Namespace ClassID
        NULL,                   // Outer unknown that aggregates the new object
        CLSCTX_INPROC_SERVER,   // a server dll
        IID_IStoreNamespace,    // interface ID
        (LPVOID*)&pStore);      // The returned IStoreNamespace object
    
      // Initialize the new Namespace object.
      pStore->Initialize(NULL, 0);
    
      // Open the first enumerated folder.
      fprops.cbSize = sizeof(fprops);
      pStore->GetFirstSubFolder(FOLDERID_ROOT, &fprops, &hFEnum);
      pStore->OpenFolder(fprops.dwFolderId, 0, &pFolder);
      
      // If a message exists, ...
      if (fprops.cMessage > 0)
      {
        // ...open the first message in the first folder.
        mprops.cbSize = sizeof(mprops);
        pStore->GetFirstMessage(0, 0, MESSAGEID_FIRST, &mprops, &hMEnum);
        pFolder->OpenMessage(mprops.dwMessageId, IID_IStream, &pStream);
      
        // Print the message content to a stream.
        HRESULT hr = S_OK;
        char szBuff[100];
        ULONG cbRead = 1;
        while (hr == S_OK && cbRead > 0)
        {
          hr = pStream->Read(szBuff, sizeof(szBuff)-1, &cbRead);
          if (hr == S_OK)
          {
            szBuff[cbRead] = NULL;
            puts(szBuff);
          }
        }
      }
      // Release our IStream object.
      pStream->Release();
      
      // Release our IStoreFolder object.
      pFolder->Release();
    
      // Release our IStoreNamespace object.
      pStore->Release();
      
      return 0;
    }
    Dans les propriétés de mon projet, j'ai juste précisé le chemin include vers le header (C:\Programmes\MS SDKs\Windows\SDK 5\Include...aux noms près) et rien d'autre, pas de librairie.

    J'ai les erreurs suivantes :
    • "GetFirstMessage" n'est pas un membre de IStoreNamespace
    • IStoreFolder::OpenMessage : impossible de convertir le paramètre 3 de IStream ** en LPVOID*
    • "puts" identificateur introuvable


    Il semble que j'ai une interface qui ne correspond pas dans mon header, ou que j'ai oublié d'ajouter une quelconque référence de librairie...
    Je suis sous Vista familial premium SDK1, et j'ai windows mail et windows live mail.

    Pourriez vous éclairer ma pauvre lanterne sur ces mystérieuses erreurs alors que je ne fais que suivre l'aide officielle du composant ?

    Bonne soirée !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 399
    Par défaut
    1. Comme le dit google, GetFirstMessage() n'est pas dans IStoreNamespace mais dans IStoreFolder.
    2. Il faut un cast explicite, comme pour CoCreateInstance() ou QueryInterface().
    3. Tu n'as pas inclus <stdio.h>
    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.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Par défaut Erreur
    Bonjour,
    J'ai un petit problème avec mon code. J'écrit une application en visual C++ Api 32, pour l'extraction et la sauvegarde des emails.

    Une partie de mon code, permet l'extraction des emails en provenance de OutlookXpress / Windows Mail.

    tout fonctionne bien sur des PC équipés de Vista ou XP en ce qui concerne l'extraction des emails, par contre sous Windows 2000, au bout d'un moment et de façon alléatoire, j'ai une erreure Unhandled exception

    hRes = pFolder->OpenMessage(mprops.dwMessageId, IID_IMimeMessage, (VOID **) &pMimeMessage);

    et du coup mon application plante.

    Avez vous une idée ?

    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 399
    Par défaut
    Peut-on avoir plus d'infos sur l'exception?
    Est-ce une exception COM ou une Access Violation ?
    Quel est le type exact de pFolder et pMimeMessage ?
    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
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Par défaut
    bonsoir Médinoc,

    Le message d'erreur exact est le suivant:

    Unhandled exception at 0x00644561 in Soft.exe: 0xC0000005: Access violation reading location 0x00000000

    Quel est le type exact de pFolder et pMimeMessage ? :

    IStoreFolder* pFolder = NULL;
    IMimeMessage* pMimeMessage = NULL;

    Ce qui est bizarre c'est que je n'ai cette erreure uniquement sous Windows 2000 et Outlook Xpress.

    Alain

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 399
    Par défaut
    Traduction: Tu déréférences un pointeur nul.

    Vérifie que pFolder n'est pas nul lors de l'appel.
    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.

Discussions similaires

  1. Les pragma comment pour linker les libraires!
    Par neo62matrix dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 07/11/2007, 11h31
  2. Comment retrouver les Dll ou les OCX suivantes?
    Par nnj dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/08/2007, 13h18
  3. [shell32.dll]comment utiliser les icones ?
    Par deeal dans le forum Visual C++
    Réponses: 8
    Dernier message: 04/12/2006, 11h56
  4. Position des balises H2 ou comment les numéroter
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/07/2003, 20h24
  5. Vous gerez comment les options d'un programme?
    Par n0n0 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2002, 14h21

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