|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : mars 2007 Messages : 15 ![]() |
Bonjour
Je suis en train d'essayer d'accéder aux destinataires d'un Mail dans un Addin COM Outlook en MSVC++ avec Redemption. J'ai rencontré pas mal de problèmes, résolus au fur et à mesure, mais il en reste un. Compte-rendu succint de mes épreuves : Pour brancher Redemption sur Outlook il suffit en théorie de faire Redemption.RDOSession.MAPIOBJECT=Outlook.Application.GetNamespace("MAPI").MAPIOBJECT - sauf que ceci n'est supporté qu'à partir de Outlook 2002 pour 2000, il faut utiliser RDOSession.Logon() - sauf qu'en C++, les paramètres de Logon ne sont pas optionnels, il faut les passer, et "" ou 0 (zéro) ne sont pas des valeurs correctes pour des paramètres optionnels, il faut utiliser vtMissing ! - penser à faire un RDOSession.Logoff() à un moment (est-ce nécessaire?) tout ceci fut acquis après pas mal de recherches pas simples sur internet où on ne trouve quasiment que des exemples en VB ou en C# ![]() Code :
Redemption::IRDOMailItemPtr = m_pRDOSession->GetMessageFromID(Outlook::_MailItem.EntryID) et à partir de là, on a accès aux destinataires sans provoquer l'affichage de la fenêtre de sécurité. C'est là que j'ai un problème : GetMessageFromID me sort en erreur avec le code 0x80040201 et le texte donné par VCExpress en débug : "An event was unable to invoke any of the subscribers"... Incompréhension totale jusqu'à ce que j'apprenne que 0x80040201 est AUSSI le code de MAPI_E_UNKNOWN_ENTRYID ! Merci Visual C++ pfff... Donc mon problème est relativement simple : GetMessageFromID ne trouve pas l'item avec l'EntryID donné, sauf que bien sûr, cet EntryID est correct. Code :
J'ai pas mal embêté Dmitry (l'auteur de Redemption) avec mes questions, parce que je ne trouvais rien de tout çà sur le Net... - donc j'appelle à l'aide ici (pourquoi GetMessageFromID ne marche-t-il pas ?) - mais aussi je publie mon avancement afin que d'autres éventuellement puissent en profiter et passent moins d'heures à chercher en vain. Merci de votre aide. |
||||
|
|
00
|
|
|
#2 | |||||
|
Invité de passage
![]() Inscription : mars 2007 Messages : 15 ![]() |
Solutions :
Dans mon cas, le status MAPI_E_UNKNOWN_ENTRYID était correct car Redemption ne connaissait rien des Stores Citation:
Code :
Par contre, quand j'ai essayé la seconde méthode indiquée, j'ai eu des problèmes : Code :
Mais j'avais ce même genre de comportement sur d'autres choses d'apparence anodine, quand la lumière s'est faite : J'utilisais indifféremment des "pointeurs normaux" et des "smart pointers" ; le compilateur ne disait rien, les surcharges C++ masquant toute cette cuisine trop efficacement (au passage, je hais un petit peu le C++, enfin, ses dérives et abus trop faciles, je suis vieille école, le C pur et dur). Donc, en remplaçant dans tous les endroits du code au comportement étrange xxx *truc par xxxPtr truc, tout s'est mis à marcher ! (par exemple, dans le code cité, avec store déclaré en Redemption::IRDOStore *, ça plante, alors que s'il est déclaré en Redemption::IRDOStorePtr, ça marche) Voilà, j'espère que ces témoignages de galère aideront d'autres explorateurs du monde brumeux du C++. Amike ! |
|||||
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 351 ![]() |
Merci pour ta réponse !
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com