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

MFC Discussion :

[ATL]Problème avec un IconHandler perso.


Sujet :

MFC

  1. #1
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut [ATL]Problème avec un IconHandler perso.
    Bonjour,

    J'ai tenté de créer un IconHandler perso pour les fichiers ZIP. Plutôt que d'écrire une classe COM à la main, j'ai tenté un projet ATL. À présent, d'après mes fichiers de trace, l'explorateur trouve bel et bien mon IconHandler et reçoit son interface IExtractIconW, mais bizarrement, n'appelle aucune de ses méthodes...

    En fait, l'unique méthode appelée (en dehors des méthodes d'IUnknown qu'on ne peut tracer sous ATL sans modifier les headers) est IPersistFile::Load(). QueryInterface est appelée juste après, puis plus rien...
    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.

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Bon je veux bien essayer de t'aider (j'ai dis essayer ) mais je ne comprends pas ce que tu souhaites au final Médinoc ?

    Parceque je passerais par la base de registre... mais j'ai peut être mal compris

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Eh bien, ça dépend de ton niveau sur les Composants COM...
    Un IconHandler permet de définir l'icône fichier par fichier et non extension par extension: C'est ce qui permet par exemple à visual d'afficher une icone différente sur les fichiers .sln selon la version de la solution (7 ou 8).

    D'après l'aide Microsoft, un IconHandler est un composant COM qui implémente les interfaces IPersistFile et IExtractIconW/IExtractIconA.

    J'ai tenté de développer ce composant COM avec un projet ATL, et j'ai enregistré le composant dans la base de registre.
    Lorsque j'ouvre un dossier qui contient des ZIP, l'explorateur charge bien le composant, joue un peu avec les méthodes de IPersistFile, demande les interfaces IExtractIcon mais ne les utilise pas: Aucune méthode de IExtractIcon n'est appelée...
    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.

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    J'aurais bien aimé t'aider.... mais j'ai encore jamais regardé les icons handler pour certains fichiers... dsl

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Bon, j'ai du nouveau, et là, c'est sans doute une erreur ATL pure:
    J'ai développé un petit client COM pour mon IconHandler, et j'ai remarqué qu'en fait, QueryInterface() retournait E_NOINTERFACE pour IExtractIconW, alors que coté DLL, la DLL croit avoir réussi.

    Donc, il doit y avoir une couche intermédiaire due à ATL, qui empêche de marcher...
    PS: J'ai aussi remarqué que IExtractIconW n'était pas définie comme IPersistFile: En fait, elle n'a pas de UUID intégrée, je passe l'IID dans une macro COM_INTERFACE_ENTRY_IID).

    PS: Je commence à croire que le mieux est encore de mettre ATL au placard et développer un vrai composant COM en pur C++...

    Edit après plus d'un an: C'était un problème de marshalling, combiné au mauvais ThreadingModel. Depuis, j'ai fait un composant free-threadé (ThreadingModel=Both + Free-Threaded Marshaller) et ça marche nickel...
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [eZ Publish] Surcharge de ezwebin : problème avec mes tpl perso full dans l'admin
    Par ricozor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 16/11/2011, 13h03
  2. Problème avec une barre d'outil "perso"
    Par semyr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/01/2008, 15h09
  3. Problème avec un composant perso JSF1.2
    Par Mediii dans le forum JSF
    Réponses: 1
    Dernier message: 27/12/2007, 10h50
  4. Problème dans un projet ATL COM avec DLL et MFC.
    Par jamais34 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 03/10/2007, 19h03
  5. [AS2] Problème avec ComboBox lors création d'un composant perso
    Par aldo-tlse dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 24/05/2006, 18h51

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