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 :

déclarer des objets dans les DLL


Sujet :

C++

  1. #1
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut déclarer des objets dans les DLL
    je sais comment faire passer des integer, des doubles dans des DLL et les déclarer dans VBA.
    Voici comment je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function n Lib "V:\finum" Alias "_N@8" (ByVal x As Double) As Double
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    namespace finum 
    {	double N(double x);}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define double_dll __declspec(dllexport) double __stdcall
     
    extern "C" {
    double_dll N(double x){return finum::N(x) ;} 
    }
    Pour l'instant, rien de compliqué, par ce que se sont des types qui existent en C comme en VBA. Maintenant, quand on crée des classes en C, comment les déclarer dans VBA?
    Par ex, j'ai crée une classe (incomplete) "matrice" dans C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class Matrice
    {
    Matrice(int largeur, int hauteur);
    public:
    Matrice():maLargeur(0),maHauteur(0){}
    int maLargeur;
    int maHauteur;
     
    };
     
    Matrice::Matrice(int largeur, int hauteur):maLargeur(largeur),maHauteur(hauteur){} 
     
    int main()
    {
     Matrice M;
     M.maHauteur=10;
     M.maLargeur=20;
     
    }
    Comment faire pour déclarer cet objet dans les headers de la DLL?
    Ne serait-ce que pour faire déclare une macro comme ceci:

    #define double_dll __declspec(dllexport) double __stdcall

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par deubelte
    Maintenant, quand on crée des classes en C++, comment les déclarer dans VBA?
    On ne peut pas.

  3. #3
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    merci au moins la réponse est claire.
    tout ce qu'on peut déclarer, ce sont des integer, des doubles, des strings, des arrays, des longs, des booleans....
    Am I right?

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par deubelte Voir le message
    merci au moins la réponse est claire.
    tout ce qu'on peut déclarer, ce sont des integer, des doubles, des strings, des arrays, des longs, des booleans....
    Am I right?
    Oui (j'espère qu'en parlant de string tu veux parler d'un tableau de caractère et non d'un objet std::string), car la représentation en mémoire d'un objet C++ n'a rien de standard.

    Par contre tu peux bien sûr créer une DLL de classes C++, utilisable uniquement en C++. Par exemple :

    cppdll.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #ifndef H_CPPDLL_H
     
    #define H_CPPDLL_H
     
    #ifdef CPPDLL_EXPORTS
    #   define DECLSPEC __declspec(dllexport)
    #else
    #   define DECLSPEC __declspec(dllimport)
    #endif
     
    class DECLSPEC cppInteger /* Cette classe est exportee */
    {
    protected:
        int value;
     
    public:d
        DECLSPEC void setValue(int val);
        DECLSPEC int getValue();
    };
     
    #endif
    cppdll.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "cppdll.h"
     
    void cppInteger::setValue(int val)
    {
        value = val;
    }
     
    int cppInteger::getValue()
    {
        return value;
    }
    Pour utiliser la classe cppInteger dans une application, inclure cppdll.h, se lier avec cppdll.lib et avoir cppdll.dll à l'exécution.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu veux faire une DLL contenant des classes utilisables depuis VB, tu dois faire une DLL COM (ou une DLL .Net utilisable depuis COM).
    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.

  6. #6
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    Si tu veux faire une DLL contenant des classes utilisables depuis VB, tu dois faire une DLL COM (ou une DLL .Net utilisable depuis COM).
    possible de faire ca avec Visual Express?
    as tu de la doc?

    COM=common objet ??

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par deubelte Voir le message
    possible de faire ca avec Visual Express?
    as tu de la doc?

    COM=common objet ??
    COM signifie Componnent Object Model. C'est une technologie MS indépendante de toute plateforme et de tout langage de programmation qui permet de créer des composants (des classes) utilisables depuis à peu n'importe quel langage. Il vaut mieux bien maîtriser au moins un langage de programmation avant de s'intéresser à COM.

Discussions similaires

  1. Instanciation automatique des objets dans les formulaires
    Par vincent7894 dans le forum Spring Web
    Réponses: 2
    Dernier message: 21/02/2012, 09h58
  2. Réponses: 3
    Dernier message: 19/08/2011, 13h09
  3. Réponses: 1
    Dernier message: 07/01/2010, 16h16
  4. J'ai pas les infos des objets dans l'éditeur
    Par mister3957 dans le forum MFC
    Réponses: 3
    Dernier message: 20/02/2006, 19h43
  5. Gestion des versions d'objets dans les SGBD
    Par bennus dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 09/05/2005, 12h57

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