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

 C++ Discussion :

Référence OCX depuis C++ natif (NON managé)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de cyrille37
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 155
    Par défaut Référence OCX depuis C++ natif (NON managé)
    Bonjour,

    J'ai un projet C++ développé avec Visual Studio 6. Ce projet utilise une référence à un OCX. Avec VS6 il suffisait d'ajouter un composant et VS6 générait un .h et un .c pour wrapper les appels.

    J'ai ouvert le projet avec Visual Studio 2008, la conversion s'est bien passé, la compilation fonctionne. Par contre, si j'efface les fichiers sources du wrapper généré par VS6, je ne trouve pas le moyen de les générer avec VS2008.

    Les seul docs que je trouve sur le net et sur la KB de MS présentent des solutions pour le C++ managé.

    Existe-t-il encore un outil dans VS2008 qui permettrai de faire comme avec VS6: généré le wrapper de l'ocx ?

    Merci
    Cyrille.

  2. #2
    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
    Sous Visual, je connais deux types de wrappers C++ non-managés:
    • Le wrapper IDispatch de MFC
    • Le wrapper _com_ptr_t du Compiler COM Support

    Je te conseille le second, qui s'utilise avec #import <fichier contenant une TLB>.
    Note qu'aucun des deux n'est utilisable en C. En C, tu te retrouves lâché dans la nature comme si tu avais un compilo autre que Visual, et il te reste la solution d'extraire le .IDL avec OLEVIEW.EXE et le recompiler pour obtenir un fichier d'en-tête.
    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
    Membre confirmé Avatar de cyrille37
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 155
    Par défaut
    Merci pour ta réponse, je vais creuser les sujets que tu as cités.

    En attendant, pour préciser ma question:

    VC6, à l'ajout de la référence sur l'OCX, générait 2 fichiers, un .h et un .c pour wrapper l'OCX. Ces fichiers auto-générés étaient constitués des Macros MFC DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE ainsi que de la classe de wrapping héritant de CWnd et implémentant tous les appels wrappés contenant chacun un appel à la méthode CWnd::InvokeHelper().

    Je vais regardé du côté du #import <TLB>, par contre il faut que je trouve le moyen de généré ce .tlb, car pour l'instant j'ai seulement le fichier .ocx.

    Cyrille

  4. #4
    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
    Citation Envoyé par cyrille37 Voir le message
    VC6, à l'ajout de la référence sur l'OCX, générait 2 fichiers, un .h et un .c pour wrapper l'OCX. Ces fichiers auto-générés étaient constitués des Macros MFC DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE ainsi que de la classe de wrapping héritant de CWnd et implémentant tous les appels wrappés contenant chacun un appel à la méthode CWnd::InvokeHelper().
    Tout ça, c'est typique du wrapper IDispatch de MFC.

    Je vais regardé du côté du #import <TLB>, par contre il faut que je trouve le moyen de généré ce .tlb, car pour l'instant j'ai seulement le fichier .ocx.
    Es-tu sûr que le .ocx ne contient pas le .tlb dans ses ressources? Ça arrive souvent.
    Dans ce cas, il te suffit de mettre directement l'OCX dans ta directive #import.
    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
    Membre confirmé Avatar de cyrille37
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 155
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Es-tu sûr que le .ocx ne contient pas le .tlb dans ses ressources ?
    Je n'ai pas les sources de l'OCX, il est installé avec un MSI et il y a seulement le fichier .ocx.

    Citation Envoyé par Médinoc Voir le message
    Dans ce cas, il te suffit de mettre directement l'OCX dans ta directive #import
    J'ai essayé. Pas d'erreur sur le ligne d'import:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #import "C:\Program Files\....ocx"
    Par contre tout le code qui utilise l'ancien wrapper ne compile plus car il ne connait pas la classe qui était généré par VS6.

  6. #6
    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
    En effet, ce sont deux types de wrappers différents.

    J'ai retrouvé la commande pour générer des wrappers IDispatch MFC:

    C'est Add -> Class... -> Catégorie MFC et là tu as le choix entre "from ActiveX control" et "From TypeLib".
    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. accès code managé depuis code natif
    Par krossark dans le forum C++/CLI
    Réponses: 1
    Dernier message: 18/06/2010, 15h31
  2. problème appel dll c++ non managée depuis C#
    Par zwazillon dans le forum C#
    Réponses: 2
    Dernier message: 19/10/2009, 15h10
  3. appeler du .NET depuis une dll non managé
    Par sebs_78 dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 05/12/2007, 09h36
  4. Réponses: 4
    Dernier message: 20/08/2007, 13h29

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