Bonjour,
Développant un outils pour le nouveau Window Mail de Vista (remplaçant d'Outlook Express), je suis a la recherche de la nouvelle version du fichier
appelé msoeapi.h que je n'arrive pas a me procurer car avec l'ancienne version j'ai quelques soucis. Je développe sous Visual Studio .Net 2002. Y aurait-il alors un SDK à installer ou autre?
Merci de votre aide par avance.
Delirium6
Il est clair que pour ce que tu veux faire, tu dois télécharger la toute dernière Windows SDK sur le site de Microsoft.
La SDK de ton Visual Studio ne peut pas te fournir d'en-têtes pour Vista, c'est sûr.
Oui je suis d'accord, mais mon application est développée sous visual studio .net 2002, dois je alors porter mon programme sous le 2005 avec le sdk vista ? ou bien, où puis je trouver un fichier d'installation du SDK Vista pour visual studio?
Y a pas de mais ! :twisted: :lol:
Oui oui, on a compris la question.
Tu devrais, parce que le compilateur est meilleur, et uniquement pour cette raison.
Ca n'existe pas. La Windows SDK n'est pas mariée à une version de Visual Studio. Ni même à Visual Studio.
Tu peux très bien te servir de la SDK pour développer avec Eclipse, le plugin CDT (C++), le compilateur MinGW et la Windows SDK si le coeur t'en dit
C'est d'autant plus sûr et certain que j'ai fait moi même ce genre de manips des dizaines de fois.
Donc comme je te l'ai dit dans ma première réponse, tu télécharges la SDK et tu t'en sers.
Ca ne peut pas être plus simple.
Voilà je viens de télécharger le dernier SDK pour Vista!
Aucune trace du fichier "msoeapi.h" que je cherchais !
Il n'y a qu'un msoeapi.idl!
Et lorsque que l'on regarde la msdn : http://msdn2.microsoft.com/en-us/library/ms715241.aspx
On voit bien l'include du msoeapi.h que je n'ai toujours pas réussi à trouver!
Pas si simple que ça !!
Ah oui ?...
Bon, je n'ai pas téléchargé la dernière SDK. (D'ailleurs je n'ai pas Vista et si ça se trouve je peux pas installer cette SDK donc je ne vais pas perdre mon temps à risquer d'essayer) Mais j'ai la 2003, qui est donc postérieure à la tienne de 2002
J'y vois bien le msoeapi.h accompagné du msoeapi.idl. ce qui est tout à fait normal puisque c'est du COM tout ça.
Alors là tu me dis que dans la dernière SDK il y a le .idl et pas le .h. Moi c'est simple je ne peux pas le croire.
Dis tu ne me fais pas un coup comme wiss20000 qui as insisté pendant 3 ou 4 posts à dire qu'il n'avait pas un fichier qui était sous son nez ?
Bon tu n'as pas msoeapi.h ? Alors admettons.
Mais comme tu connais bien la programmation Windows, tu sais bien que le .h que tu veux est généré par le compilateur .idl. Celui-ci contenant les définitions des interfaces COM que tu veux utiliser.
Alors au pire tu compiles ce msoeapi.idl pour générer le .h, ce qui revient à dire que tu te sert de ta SDK et c'est tout simple...
Dans mon msoeapi.h, il y a ces indications qui restent probablement valables. Les voici dans l'espoir qu'elles te soient utiles.
Bon, poussé par la curiosité, j'ai booté un Windows (quelle abnegation...) et je suis allé voir sur le site de Microsoft.
Il apparaît qu'avec mon XP je peux télécharger et installer cette fameuse SDK.
Ce que je suis en train de faire.
Affaire à suivre
Je vous assure que le fichier msoeapi.h n'est pas présent!
Par ailleurs, je ne connais pas bien la programmation Windows car je commence juste celle-ci pour ainsi dire!
La je suis en train de regarder au niveau du compilateur midl du SDK Vista pour essayer d'en sortir mon fichier msoeapi.h ainsi que ceux dont il dépend!
Je vous remercie de votre aide en attendant de vos nouvelles!
Donc voilà, j'ai installé cete fameuse SDK et ... bad news. :(
En effet il n'y est pas.
On peut dire que tu joues de malchance car c'est la première fois que je manquant dans une SDK, et si ça se trouve c'est le seul qui n'accompagne son .idl.
Mais, et ça ne va pas te consoler, je ne le vois pas non plus dans la SDK qui accompagne VS 2005
Bref tu va devoir compiler à moins que....
- Je vois dans son copyright que le fichier .idl n'a pas été retouché depuis 2005. Si ça se trouve la version de SDK 2003 (que je peux t'envoyer en privé si ça te rend service) peut convenir.
Tu dis avoir des problèmes et tu attribues ça à un fichier msoeapi.h pas suffisamment récent. Mais si tu débutes la programmation Windows/COM (et soit dit sans vouloir t'offenser), tu as peut être mal cerné ton problème. Tu pourrais pas détailler un peu ici qu'on regardes ?
- Si tu as raison sur la cause du pb alors tu vas devoir compiler l'.idl. Prend un .h qui accompagne son .idl dans la SDK et regarde bien les options de compilation qu'ils ont utilisées, et prend les même. A priori ça ira.
Autre conseil, sous le commutateur /I, veille à bien donner les bons répertoires includes. Ce point n'est pas précisé, je pense, dans les .h que tu pourrais prendre comme modèle.
Bon courage.
Toujours poussé par la curiosté, j'ai essayé de compiler le fichier.idl
A priori sans problème Comme commande j'ai donné
Ce qui est à priori suffisant
Si tu as besoin je t'envoie en privé le msoeapi.h ainsi généré :)
Merci, de vos réponses qui me permettent d'y voir beaucoup plus clair. Il est vrai que j'attribue mon problème à ce fichier msoeapi.h, car en fait je travaille sur un anti-spam qui fonctionne sous Outlook Express mais que je dois rendre compatible pour Windows Mail de Vista.
Ayant deux problèmes de fonctionnalité sous windows mail, je me suis dirigé vers ce fichier qui permet de faire tampon entre mon application et windows mail. Et vu que j'utilisais ce fichier msoeapi.h provenant du SDK de 2003, j'ai pensé qu'en obtenant ce fichier à partir du dernier SDK de Vista mes problèmes seraient résolu (ce que je n'ai pas eu le temps de tester hier soir ) Mais c'est ce que je vais faire maintenant vu que j'ai réussi à créer ce fameux fichier à l'aide du compilateur midl et des options que vous m'avais fournies!
En attendant de tester ceci, je vous remercie car au moins , sur ce forum, on suit les problèmes jusqu'au bout même si des fois les réponses sont un peu séche!
Aurais-je été sec :?:
Peut être ;)
J'essaie d'aider de mon mieux sur ce forum, et ceci bénévolement. Ca me prend beaucoup de temps, alors je ne m'embarrase pas de fioritures.
En outre je suis connu pour dire clairement ce que je pense... Je suis technicien, pas diplomate ;)
Mais bon si je suis sec c'est surtout parce que je dispose de peu de temps. Il n'y a rien de personnel, ni même de volonté d'être désagréable :)
Et l'important c'est ne ne pas sécher sur les questions ;)
Au plaisir de te revoir ici si tu as besoin :)
Il n'y a aucun doute sur ça, et je suis tout à fait d'accord :D
Bon je viens de tester mon application compilé avec le dernier fichier crée avec le SDK Vista, et cela m'a permis de résoudre un seul de mes deux problèmes!! Dommage j'aurais préféré qu'il me les résolve tous! Bon un c'est déjà pas mal aussi.
Donc maintenant, je vais vous expliquer mon problème, comme je vous l'ai déjà dit, mon application est un Anti-Spam, ainsi à la réception d'un nouveau message dans windows mail, celui-ci doit l'analyser ce qui n'est pas le cas ! (sachant que cela marchait trés bien avec Outlook Express!).
Et là, je suis un peu coincé car je ne sais plus vraiment où chercher!
Ce qui me permettait d'attraper l'arrivée des nouveau messages était tout simplement ce code là :
Mais je me pose aussi la question sur le fait que le nouveau Windows Mail, possède son propre antispam et que celui-ci n'utiliserais pas par hasard la même gestion d'évenement? ce qui expliquerais pourquoi je ne l'intercepterais plus!
Si on regarde ce qu'il y a dans le fameux msoeapi.h et dans ce que raconte la MSDN, ils n'ont rien changé, et il n'y a pas de raisons que ça ne marche plus.
Normalement le nouveau Windows Mail n'utilisera pas le même gestionnaire d'événements, mais la même notification, ce qui n'est pas la même chose. et ce qui à priori offre à deux applis la possibilité d'être notifiées du même évenement.
Je regarderais qu'un appel à IStoreFolder::RegisterNotification ne manque pas dans ton code.
Je regarderais à un niveau un peu plus haut, non l'événement mais la fenêtre COENotifyWnd. Peut être que l'événement est émis, mais qu'il se perd dans la table de routage pour une raison à déterminer.
J'aimerais bien essayer mais malheureusement (heureusement ?) je n'ai pas de Vista
Si tu as des doutes sur des bouts de codes, n'hésites pas à les poster ici.
J'aimerais savoir où je pourrais trouver de la documentation sur le nouveau gestionnaire d'événement?
J'ai bien un appel à IStoreFolder::RegisterNotification .
Qu'appelais vous par table de routage? désolé cela peut paraitre implicite, mais je n'en ai aucune idée!
Il y a incompréhension. j'ai voulu dire que le gestionnaire d'événements de Windows Mail et celui de ton application sont indépendants. Et que si le système envoie le message à Windows Mail, il l'enverra aussi à ton application. En cela les deux sont notifiés de la même façon. C'est ce que j'ai voulu dire par même notification.
Les gestionnaires dévénements c'est ce que fait chaque application quand elle est notifée, c'est à dire quand un événement tel que WM_NEWMSGS lui arrive. ce sont deux choses bien distinctes et c'est ce que j'avais voulu dire.
Fort bien. As tu vérifié que l'appel retourne bien S_OK ?
La table de routage c'est:
ce qui fait que quand tel événement arrive, telle méthode de la classe qui encapsule la fenêtre est appelée.
Ce que j'ai voulu dire c'est que si la fenêtre COENotifyWnd a quelque chose qui ne va pas, il est possible que le message n'arrive pas.
Mais je n'y crois pas trop.
La première chose est de bien être sûr que retourne bien S_OK
Il est vrai que je n'ai en aucun cas pensé à regarder le retour de cette fonction, et là je ne comprends pas, car elle ne me retourne pas S_OK ni même une des deux erreurs de retou que l'on peut avoir :
http://msdn2.microsoft.com/en-us/library/ms710256.aspx
Voila le code :
Comment est-ce possible?
Grave erreur en programmation COM :lol:
Deux erreurs...Quel optimisme...
Certes c'est ce que dis la doc. Mais COM étant ce qu'il est et peut être venant d'être ré-écrit en partie pour Vista, faut s'attendre à en voir de belles :lol:
Tout est possible en programmation Windows.
Il y a gros à parier qu'à la ligne ci-dessus, m_Hwnd n'est pas initialisé correctement ou que la fenêtre ne plait pas à l'API COM.
Je ne suis pas sûr que le style WS_POPUP convienne très bien.
As tu essayé WS_POPUPWINDOW ou d'autres styles ?
Oui c'est ce que je commence à comprendre car aprés un an de prog sous Fedora Core ca change!!
Non je n'ai pas regardé mais c'est ce que je vais faire tout de suite !
Il faut aussi savoir aussi que cette application, ce n'est pas moi qu'il l'ai développée, je ne fais que la reprendre pour débugguer et la rendre compatible Vista, alors j''ai encore énormément de chose à découvrir et à comprendre.
Pour ça oui...
J'avais bien compris.
La programmation Windows c'est un monde à part entière.
Enfin, un monde entièrement à part, je veux dire.
Et puisque tu es dans les découvertes, hâte toi de découvrir que MFC c'est un gros tas de boue. Et que ça vaut le coup de découvrir d'autres toolkits.
Je viens d'essayer les différents styles mais rien n'y fait!
J'ai affiché le numéro de l'erreur que me retourne le RegisterNotification avec ce code la :
et j'obtiens ça: -2147467263 !!!
Déjà je ne sais pas si ce code là existe et de plus je n'ai rien trouvé comme informations avec lui!
je vais regarde à ce niveau là maintenant!
Ma foi ça ressemble bien à un code d'erreur COM, ya pas à dire.
Pas le temps de regarder dans les docs ce soir. Demain peut être.
Normalement, si ma mémoire est bonne, CreateEx te retourne le Handle. Tu devrais le récupérer là et le passer à l'API COM
Cette fonction renvoi un type Booléen donc impossible de passer le Handler.
Bon si c'est bien une erreur COM, c'est un peu plus rassurant (Quoi que!!)
Voila mon constructeur, peut etre devrais-je l'initialiser autrement?
Pour ca :
if( m_pOENotifyWnd->CreateEx( NULL, AfxRegisterWndClass(0,0,0,0),_T("OENotifyWnd"),WS_POPUP,rect, NULL, NULL ))
J'ai essayé different type WS_.... , et je me suis rendu compte que le WS_CHILD faisait retourner une erreur a cette fonction, je ne sais pas si cela peut aider!!
Ah mince, ma mémoire m'a fait défaut :(
Non ça n'aidera pas car WS_CHILD est incompatible avec WS_POPUP. L'erreur est donc juste.
Bon ben va falloir chercher le bug ailleurs
Je dois dire que j'ai du mal à comprendre l'organisation de ton code.
VOID SetFolder n'est apparement pas une méthode de classe. Alors où sont m_pFolder et m_pOENotifyWnd ? A quelle classe appartiennent ils. ET comment ça se fait que tu y as accès depuis cette foncion SetFolder ?
J'aimerais bien avoir une vision plus claire de la chose. Tu vas me dire que ça ne doit pas concerner ton problème. Mais il doit bien y avoir une explication quelque part. A moins que ça ne puisse fonctionner sous Vista, mais ça me paraît trop gros quand même.
Je comprend tout a fait que sans avoir une vision plus grande de la chose, vous ayez du mal a tout comprendre
Je peux vous envoyer si vous le souaitée le fichier concerné! Sinon voici déjà mon organisation :
Oui c'est plus clair pour moi.
Pour le fichier ce serait avec plaisir, mais pas aujourd'hui.
Je dois faire face à mille trucs là et je ne sai splus où donner de la tête. Enfin envoie le fichier. Mais je ne peux pas promettre de regarder.
Bon j'ai regardé le fichier que tu m'as envoyé pendant que je grignotais un casse-croûte.
Puisque tu n'en es pas l'auteur original, je me permets de dire qu'il mériterait d'être ré-écrit entièrement.
Je sais que ça ne t'aide pas beaucoup de dire ça, malheureusement.
Je n'ai pas trouvé d'erreur évidente. Vraiment navré, je ne sais pas ce qui se passe pour l'instant.
Oui je comprend bien, mais je ne peux le faire car sinon l'application devrait toute être revue!
Moi non plus, j'ai pas trouvé d'erreur évidente, et aprés quelques changements sur les options des fonctions et autres, je n'ai toujours rien!
Je sais plus ou donner de la tête là!
C'est bien de ça dont je parlais.
C'est sans doute nécessaire.
Dans le code que tu as montré ici et dans celui que tu m'as envoyé, moi non plus....
Le problème se situe ailleurs dans l'appli je pense. D'où la nécessité de la revoir.
Je n'imagine quand même pas que ça ne puissepas parcher sous Vista.
Bon courage. Si jamais j'ai une idée, je ne manquerai pas de te le dire.
ReBonjour,
je viens de trouver cela sur les forums de microsoft et de la MSDN :
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=947723&SiteID=1
Apparement je ne suis pas le seul à chercher la solution à ce problème!
Et tout fonctionnait bien pour eux aussi avec Outlook Express!
Bigre....
Alors Vista marche pas quoi....
E_NOTIMPL = NOT IMPLEMENTED
Pas de quoi être fier chez Microsoft.. Tiens ça mériterait une volée de bois vert dans notre forum Vista si le coeur t'en dit :D
Maintenant tu peux essayer de contourner le problème avec des API telles que ReadDirectoryChanges
Mais ça va t'obliger à ré-écrire beaucoup de code. Et encore faut-il que les Folders en question correspondent bien à un répertoire physique sur le disque, ce qui n'est pas forcément certain. A vérifier donc.
Effectivement, je viens de tester le code erreur de retour est c'est bien celui-ci.
C'est clair, mais il y a tellement de chose a reprocher à Vista, comme le contrôle des comptes utilisateurs et le Windows Defender qui bloque des programmes légitimes sans permettre de spécifier définitivement la validité d'un programme.
De toute façon je ne vois pas d'auters solutions, alors je vais m'y atteler!
Avec Windows Mail, plus de fichiers ."dbx", mais des dossiers contenant les ".eml" et gardant la même hiérarchie que son arborescence dans le compte windows mail.
Merci des conseils, je vous tiendrais au courant!
Et bien vas y, ne te prive pas.
Et ne te retiens pas surtout.
Donne ton avis sur le forum Vista :)
C'était avec plaisir, la discussion était intéressante.
Oui tiens nous au courant ici :)
Bonjour,
Je reviens ici car je me pose des questions, et j'aimerais y voir plus clair,
pour le ReadDirectoryChangesW (http://msdn2.microsoft.com/en-us/library/aa365465.aspx)
est ce un gestionnaire d'evenement ou doit on faire tourner une routine qui appelle celui-ci?
Par ailleurs, j'ai trouvée le FileSystemWatcher (http://msdn2.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)
Mais je me pose la question si je peux utiliser cela avec MVS2002 .Net et ci c'est mieux que d'utiliser le ReadDirectoryChangesW ?
Merci
Ce n'est pas un gestionnaire d'événement, du moins au sens dans celui où tu cherchais à avoir des notifications dans ta fenêtre.
Cependant pour ce que tu veux faire, tu dois faire tourner une routine. Et par tourner tu ne crois pas si bien dire.
La "bonne" façon est de faire ça dans un thread. Mais c'est peut être ce que tu voulais dire :)
D'abord tu appeles l'API ReadDirectoryChangesW en lui passant une structure OVERLAPPED
Ensuite tu rentres dans le thread et dans celui-ci tu appelles WaitForMultiplesObjects (ou WaitForSingleObject si ça suffit à ton appli)
Tout ça c'est une cuisine assez compliquée qui est la façon de faire des entrées/sorties asynchrone sous Windows.
Pour te donner une idée, toi qui fait de l'Unix, WaitForMultipleObjects présente des analogies avec l'appel système select.
Enfin disons que derrière c'est la même idée.
Si tu es un lecteur fidèle de Programmez! ;), j'y ai traité le ReadDirectoryChanges, mais il y a déjà assez longtemps. Mais je peux retrouver le N° si tu penses l'avoir.
J'oubliais...
Ca c'est une classe .Net
Pour toi qui code en Win32 natif, ça ne convient pas.
Merci de tous ces renseignements, j'en était sur que le FileSystemWatcher était à utiliser en .Net vu que c'etait compatible a plusieurs languages!
Malheureusement non, je ne suis pas un fidèle lecteur de votre magazine, mais je pense que je vais faire abonner mon employeur!
En ce qui concerne le numéro du magazine où vous traité du sujet ReadDirectoryChangesW, je parie qu'il n'est pas possible de le commander sur votre site ou de se le procurer?
Allez :!: faut battre le fer pendant qu'il est chaud :)
Je ne sais pas.
C'est un vieux numéro il est vrai. Ca m'étonnerait qu'il en reste.
Mais j'ai une meilleure idée. (re)envoie moi ton adresse mail privé et pendant que tu t'abonnes à Programmez! ;) Je vais te trouver une solution :)
Bonjour et désolé de revenir aussi tard,
Tout d'abord pour :
C'est bon nous sommes abonnés depuis le mois dernier!!
Aprés en ce qui concerne mon application, c'est bon elle tourne correctement sous Vista et j'ai utilisé le ReadDirectoryChangesW.
Il me reste malheureusement un soucis de sur les droits d'éxècution de mon application à cause de l'UAC (User Account Control) qui la bloque si celui-ci est activé.
j'ai regardé à ce niveau là http://www.microsoft.com/france/msdn/windowsvista/Developpement-applications-Windows-Vista-utlisant-le-Controle-des-comptes-utilisateur.mspx
mais je trouve que leur explications sont assez vague!
Enfin ce qui me rassure, il y a toujour une solution à tout!! :lol:
Bonjour :)
Pas de quoi être désolé vraiment.
Je suis content d'avoir de tes nouvelles :)
Je suis très heureux de te savoir dépanné :)
Malheureusement pour l'UAC je ne peux pas t'aider. Je ne connais pas. Je n'ai pas de Windows Vista pour l'instant et tant que un travail de développement ne m'y oblige pas, je continuerai de m'abstenir.
J'espère que tu trouveras une réponse rapidement.