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

Access Discussion :

Utilisation DLL créée sous VB6


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 37
    Points : 32
    Points
    32
    Par défaut Utilisation DLL créée sous VB6
    Salut,

    Je veux utiliser dans Access une DLL créée en VB6.
    Ma DLL de test s'appelle EX_MaDll.dll, avec une seule procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub MessageBox(ByVal strText As String)
    Si je crée un nouveau projet VB6, j'arrive à utiliser cette DLL, ça fonctionne.
    Par contre, sous Access, gros problème
    Je la déclare dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Sub MessageBox Lib "EX_MaDll.dll" (ByVal strText As String)
    Je l'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call MessageBox("Salut les mecs !")
    Et à l'exécution, j'ai l'erreur suivante :
    Erreur d'exécution '453', Point d'entrée MessageBox d'une DLL introuvable dans EX_MaDll.dll
    J'ai bien ajouté cette dll dans les références (menu Outils, Références).
    Là, je suis bloqué... Vous avez une idée ?

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Comme cela, ça a l'air propre ce que tu as fait...
    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Sub MessageBox Lib "EX_MaDll" (ByVal strText As String)
    ?

    Bon courage,

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    fais attention au majuscule/minuscule dans le nom de la fonction

    je sais pas dans vb, mais dans Access il faut y faire attention

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    J'ai bien vérifié les majuscules, mais aussi en enlevant .dll ou en mettant le chemin complet. Par contre, si je met un nom de dll bidon, il me renvoie une autre erreur, c'est donc qu'il trouve bien ma dll, mais pas la fonction qui la compose.
    Par contre, j'ai vu que normalement, si on ouvre une dll avec Dependency Walker, on doit voir les fonctions qui la composent : avec ma dll, ça ne fonctionne pas : je vois juste les sous modules et leurs fonctions, mais pas ma fonction MessageBox.

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Par contre tu dis que as référencé la dll, donc c'est une dll activeX?

    Pour les dll ActiveX tu ne peux pas exporter des fonctions avec VB6.

    A moins d'utiliser un addin, j'ai déjà vu des trucs du genre.

    Mais est-ce nécessaire de faire un activeX?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Je crois que sous VB6 on ne peut faire que des dll activex. Comme je ne connais que VB6, je suis coincé, alors ?

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par Dertron
    Je crois que sous VB6 on ne peut faire que des dll activex. Comme je ne connais que VB6, je suis coincé, alors ?
    Arf, j'ai juste utilisé VB6 pour compiler une dll activex, je savais pas qu'on ne pouvait faire que ça...

    Avec un activeX la méthode est différente, il faut déclarer un objet.
    En tapant :
    tu dois retrouver ton projet activex


    Peut-être plus d'infos sur le forum/FAQ de VB...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Merci pour l'info, je vais aller voir, mais ça me semble un brin compliqué... Je ne dois pourtant pas être le seul à vouloir utiliser une dll perso depuis Access, non ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    J'ai essayé la technique ActiveX, mais ça plante :

    je déclare :
    ça, ça passe, puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call MaDll.MessageBox("Salut les mecs !")
    mais j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur d'exécution '91': Variable objet ou variable de bloc With non définie

  10. #10
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    j'pense à un truc bête

    pour les autres librairies on s'embête pas tant, on appelle la fonction et il cherche tout seul dans quel librairie elle est non?

    t'es essayé de virer tout le code et de mettre juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call MessageBox("Salut les mecs !")
    :

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Utilisation DLL ActiveX créée sous VB6
    Bonjour,
    Citation Envoyé par Dertron
    Je veux utiliser dans Access une DLL créée en VB6.
    Ma DLL de test s'appelle EX_MaDll.dll, avec une seule procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub MessageBox(ByVal strText As String)
    [...]
    J'ai bien ajouté cette dll dans les références (menu Outils, Références).
    Là, je suis bloqué... Vous avez une idée ?
    Tu peux regarder dans les tutoriels de la section VB, il y a une petite "mine d'informations" sur les ActiveX: http://vb.developpez.com/cours/.

    Sinon, j'utilise sans aucun problème à partir d'Access des DLL ActiveX créées avec VB. Il faut respecter quelques règles simples:

    >> Seules sont directement "visibles" par un projet externe, les classes de la DLL ActiveX dont la propriété [Instancing] est "MultiUse".

    >> Seuls les propriétés, procédures et événements publiques de ces classes sont "visibles" par un projet qui référence la DLL.

    OUI, tu es obligé de passer par des classes.

    MAIS, tu peux quand même obtenir un comportement classique de DLL (c'est à dire pouvoir appeler directement les procédures, sans les préfixer avec une instance de classe).
    Pour ça, la propriété [Instancing] de la classe doit être "GlobalMultiUse" et tu obtiens des procédures publiques "globales" !

    Petites mises en garde au passage:

    >> Les procédures publiques "globales" issues d'une DLL ActiveX ne peuvent pas être appelées directement dans une requête SQL.
    Il faut recréer dans le projet une procédure qui réalise l'appel .

    >> Après ça se complique quand on considère les évolutions de la DLL ActiveX (ajout/suppression de procédures, modification des signatures de procédures...).
    Une nouvelle version de la DLL ActiveX peut nécessiter de supprimer la référence à l'ancienne DLL, et de référencer la nouvelle DLL ActiveX. C'est un problème d'identifiant (GUID) de classes qui se "contrôle" dans l'onglet [Composant] des propriétés du projet.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Merci pour les infos. La section "Développement d'ActiveX" sur les cours VB est complète, mais hyper théorique : 150 pages.... J'imagine que le concept est immense est peut difficielement se résumer à quelques pages.

    Sinon, j'ai vérifié que ma DLL ActiveX répondait bien à tes critères (GlobalMultiUse...), mais les fonctions sont toujours invisibles de l'extérieur.

    =JBO=, L'idéal serait que tu puisses mettre à dispo un exemple ultra simple de dll (une seule fonction de test) et de base Access qui fait appel à cette dll, mais je comprends tout à fait que tu aies d'autres choses plus intéressantes à faire En tout cas merci pour tes commentaires.

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par Dertron
    Sinon, j'ai vérifié que ma DLL ActiveX répondait bien à tes critères (GlobalMultiUse...), mais les fonctions sont toujours invisibles de l'extérieur.
    Pour commencer, si tu as correctement référencé ta DLL ActiveX alors tu dois pouvoir la visualiser dans l'[Explorateur d'Objets], dans la liste des bibliothèques.

    Est-ce le cas :

Discussions similaires

  1. Problème utilisation Dll créée en delphi dans une appli VB6
    Par Djelangelo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2011, 15h48
  2. Appel dynamique de DLL.net sous VB6
    Par NexBZH dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 14/01/2008, 13h28
  3. Utilisation externe d'une Dll créée sous VB6
    Par Dertron dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/04/2006, 21h19
  4. [VB6] Utiliser dll .Net dans VB6
    Par sokette dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 31/03/2005, 14h34
  5. [D8] Utilisation dll D7 sous D8
    Par smyley dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 01/11/2004, 11h28

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