[C++] MAPI (+ LES ROIS DES POINTEURS DEMANDES :D)

MAPI (+ LES ROIS DES POINTEURS DEMANDES :D) [C++] - C++ - Programmation

Marsh Posté le 03-09-2002 à 11:59:12    

Je suis a la recherche d'un source utilisant MAPI (pas le simpleMAPI). J'ai beau trifouiller le msdn, chopper les sources qu'ils fournissent j'y arrive pas.  
 
Par ailleurs le compilo me sort deux erreurs de link, normal je n'arrive pas a ajouter la librairie au projet (mapi32.dll), il me sort que le fichier est corrompu.
 
 
 
ps: El_gringo vient pas pourrir mon topic :D


Message édité par godbout le 03-09-2002 à 15:54:25

---------------
Super.
Reply

Marsh Posté le 03-09-2002 à 11:59:12   

Reply

Marsh Posté le 03-09-2002 à 13:46:40    

J'ai compris [:911gt3]


---------------
Super.
Reply

Marsh Posté le 03-09-2002 à 13:55:19    

Godbout a écrit a écrit :

J'ai compris [:911gt3]




 
Y a tout là :  
http://msdn.microsoft.com/library/ [...] u_need.asp
 
Les headers :
http://msdn.microsoft.com/library/ [...] frame=true
 
N'oublie pas qu'il faut qu'il y ait un compte email configuré dans Outlook.

Reply

Marsh Posté le 03-09-2002 à 14:06:56    

Donc comme je l'avais dit tout ca c'est ok. J'ai lu. Les headers aussi. Ce qui me manque c'est la lib/dll, mais bon c'est pas grave, au lieu de linker statiquement je vais me demerder avec des bons vieux pointeurs de fonction. Sinon j'ai bien cree un profil. D'ailleurs ca marche deja mais avec une classe basee sur MAPI, mais allégé, et ca ca m'embete.
 
ps: si on a outlook express ca peut fonctionner ou pas ? (il me semble pas qu'il gere les profils)


---------------
Super.
Reply

Marsh Posté le 03-09-2002 à 14:27:38    

Godbout a écrit a écrit :

Donc comme je l'avais dit tout ca c'est ok. J'ai lu. Les headers aussi. Ce qui me manque c'est la lib/dll, mais bon c'est pas grave, au lieu de linker statiquement je vais me demerder avec des bons vieux pointeurs de fonction. Sinon j'ai bien cree un profil. D'ailleurs ca marche deja mais avec une classe basee sur MAPI, mais allégé, et ca ca m'embete.
 
ps: si on a outlook express ca peut fonctionner ou pas ? (il me semble pas qu'il gere les profils)




 
Je crois bien que si, Outlook express 6 gère plusieurs comptes mail mais j'ai pas eu l'occasion de tester avec MAPI.

Reply

Marsh Posté le 03-09-2002 à 14:32:19    

Ouais mais il gere plusieurs comptes courrier directement dans outlook express, alors que dans outlook tu crees pas un compte mais un service de message, qui se refere a un profil. Enfin moi j'ai pas reussi a faire fonctionner MAPI avec express :/
 
En plus la je suis en train d'en chier avec les pointeurs de fonction :mad:


---------------
Super.
Reply

Marsh Posté le 03-09-2002 à 15:46:10    

Quelqu'un aurait une idee pour le petit pb suivant ??
 
Tiré du MSDN:

Code :
  1. HRESULT MAPILogonEx(
  2.   ULONG ulUIParam,               
  3.   LPTSTR lpszProfileName,       
  4.   LPTSTR lpszPassword,           
  5.   FLAGS flFlags,                 
  6.   LPMAPISESSION FAR * lppSession 
  7. );


 
Ce que je fais:

Code :
  1. typedef HRESULT (*LPFNMAPILOGONEX)(ULONG, LPTSTR, LPTSTR, FLAGS, LPMAPISESSION FAR *);
  2. LPFNMAPILOGONEX lpfnMAPILogonEx;
  3. HINSTANCE hlibMAPI = LoadLibrary("MAPI32.DLL" );
  4. lpfnMAPILogonEx = (LPFNMAPILOGONEX) GetProcAddress(hlibMAPI, "MAPILogonEx" );
  5. if (lpfnMAPILogonEx(0, "Paramètres Microsoft Exchange", NULL, MAPI_NEW_SESSION, &lpSession) != S_OK)
  6. ...


 
Je recois une messageBox:

Citation :

Debug Error!
The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.


 
J'ai beau chercher je vois pas ou est le pb :??:


Message édité par godbout le 03-09-2002 à 15:46:42

---------------
Super.
Reply

Marsh Posté le 03-09-2002 à 16:07:04    

Et avec:
 

Code :
  1. typedef HRESULT (__stdcall *LPFNMAPILOGONEX)(ULONG, LPTSTR, LPTSTR, FLAGS, LPMAPISESSION FAR *);


Reply

Marsh Posté le 03-09-2002 à 16:17:15    

:ouch: quel homme :ouch:
 
Impeccable.
Si tu pouvais m'expliquer ca m'arrangerait bien.  
Merci.


---------------
Super.
Reply

Marsh Posté le 03-09-2002 à 16:51:32    

Godbout a écrit a écrit :

:ouch: quel homme :ouch:
 
Impeccable.
Si tu pouvais m'expliquer ca m'arrangerait bien.  
Merci.




 
Par défaut, tu dois sans doute être en cdecl (c'est la "calling convention" signalée dans le message d'erreur) alors que la DLL en C est en stdcall.  
 
(Je crois que c'est en rapport avec qui doit vider la pile avant le retour du CALL mais j'en sais pas plus)

Reply

Marsh Posté le 03-09-2002 à 16:51:32   

Reply

Marsh Posté le 04-09-2002 à 03:44:54    

Pour être plus préçis et plus portable, il faut mettre STDMETHODCALLTYPE au lieu de __stdcall.
 
C'est effectivement une question de placement/libération des arguments au niveau assembleur.
 
Sous Visual C++ 6, il suffit de faire [F12] pour trouver la déclaration d'une API et voir ces détails.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 04-09-2002 à 08:55:02    

Musaran a écrit a écrit :

Pour être plus préçis et plus portable, il faut mettre STDMETHODCALLTYPE au lieu de __stdcall.
 
C'est effectivement une question de placement/libération des arguments au niveau assembleur.
 
Sous Visual C++ 6, il suffit de faire [F12] pour trouver la déclaration d'une API et voir ces détails.




Ben le [F12] il t'envoie juste a la declaration de l'API effectivement, mais nullepart ca me dit qu'il faut mettre STDMETHODCALLTYPE ou stdcall, etc...
Enfin bref, merci pour les infos.
 
 
Un petit dernier truc par contre :D
J'suis dans un projet MFC et y a des definitions de fonctions avec FAR PASCAL (remplace par WINAPI). Le pb c'est qu'il le reconnait si j'inclus windows.h, mais si j'inclus cet entete j'ai un message d'erreur comme koi je ne peux pas l'inclure :crazy:


---------------
Super.
Reply

Marsh Posté le 05-09-2002 à 03:23:38    

1)
On peut explorer en enchaînant les F12:
MAPILogonEx->MAPILOGONEX->typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)...->__stdcall.
Ctrl+*(pavé num) pour revenir.
 
 
2)
Euh... je vois pas.
Rassures-moi: tu ne fais pas les #define et les typedef toi-même ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 05-09-2002 à 09:08:55    

quels #define et typedef ?  
 
Si tu parles des entetes de fonction si.
M'enfin c'est plus trop un pb, j'ai enleve PASCAL et ca marche :/ :D


---------------
Super.
Reply

Marsh Posté le 06-09-2002 à 02:51:31    

Je m'inquiétais juste que tu n'essaies pas de définir toi-même des types/macros fournis par les #include de windows.
 
Ou de déclarer toi-mêmes les APIs.
 
Y'en a qui le font, mais faut pas !


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 06-09-2002 à 08:49:56    

ah ok :D


---------------
Super.
Reply

Marsh Posté le 07-09-2002 à 11:42:08    

up pour cet excellent topic puisqu'il est mien.
 
Bon plus serieusement, pour ouvrir une session faut un profil.
Au boulot pas de pb, je vais dans courrier et j'ai mes profils (win2k). La je veux matter chez moi et :ouch: pas de profils ? :heink:
Alors je fais comment ??? :??:


---------------
Super.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed