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

VB 6 et antérieur Discussion :

[VB6] Appel d'une fonction dans un module d'une dll


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Points : 80
    Points
    80
    Par défaut [VB6] Appel d'une fonction dans un module d'une dll
    Bonjour,

    J'ai ajouté dans les références de mon projet, la dll d'un projet existant contenant des fonctions que je souhaite appeler, mais le problème est que ces fonctions se trouvent dans un module standard (.bas) et je n'arrive pas à y accèder.

    Je n'accède uniquement qu'aux modules de classe.

    En gros, j'ai un module module1.bas, un module de classe classe1.cls et la fonction f1() dans le module1.bas et la fonction f2() dans la classe1.cls.

    J'arrive à accèder à f2() mais impossible d'accèder à f1() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim maDll As MaDll.classe1
    Set maDll = New MaDll.classe1
     
    maDll.f2()
    ... mais comment faire pour accèder à f1() ?

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Juste une idée comme ça.

    J'essaierais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim monObjet As New Classe1  ' qui aurait du être renommée, en passant

  3. #3
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 125
    Points : 128
    Points
    128
    Par défaut
    les modile bas d'in projet dll sont privés et non accessible à l'utilsateur
    faut mettre les fonction deans in module de classe avec propriété instansed sur global multiuse

  4. #4
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    A ma connaissance, les procédures d'une DLL activeX situées dans des modules sont "friend" même si elles sont déclarées publiques. En conséquence, elles ne peuvent être vues de l'extérieur de la DLL.

    Si tu as besoin d'exporter des procédures situées dans des modules, le mieux est de créer une classe "poubelle", qui aura la propriété Instancing égale à GlobalMultiUse.

    Dans cette classe, tu déclares tes procédures publiques et tu y appelles la procédure du module.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dans la classe GlobalClass.cls : 
    Public function f1()
        f1 = module1.f1
    end function
    
    Dans le module module1 :
    public function f1()
        .....
        f1 = ....
    end function
    Avantage de ce système : la classe GlobalClass étant GlobalMultiUse, il n'est pas nécessaire de la référencer dans le code de l'application cliente. Dans cette dernière, il suffira d'écrire :
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MyClass = New GlobalClass
    MyVar = MyClass.f1()
    C''est donc très intéressant, car les fonctions ainsi créées semblent faire partie du langage, ou tout au moins de l'application courante.

    Seule restriction importante à ce système : les procédures appelées ne doivent pas contenir de variables persistantes. En effet, elles sont globales, et leurs variables sont réutilisées à chaque appel. Il n'y a qu'une seule et unique instance de la fonction pour toute l'application. Il faut donc éviter l'emploi de variables globales ou statiques dans les procédures appelées (ce qui est de toutes façons une bonne manière de programmer).

    Ce genre de fonctions est surtout adapté à des fonctions paramétrées ne travaillant qu'avec des variables locales (des fonctions bien écrites, quoi). C'est dailleurs souvent le cas des fonctions situées dans un module.

    J'espère avoir apporté ma pierre à l'édifice...

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 142
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos réponses.

    J'ai finalement opté par ajouter les modules bas dans mon projet. En réalité ils référencent l'autre projet et ne sont pas en double.

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

Discussions similaires

  1. Utiliser une fonction dans un module
    Par formidable78 dans le forum VBA Access
    Réponses: 11
    Dernier message: 30/01/2008, 12h49
  2. Executer une fonction dans un module pas encore importe
    Par Aragorn_destroy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2007, 14h21
  3. Réponses: 2
    Dernier message: 23/05/2007, 14h05
  4. Réponses: 13
    Dernier message: 09/04/2007, 13h20
  5. passer une fonction dans un parametre d'une propriété de classe
    Par CAML dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 06/08/2006, 19h52

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