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 :

[Commentez] Créer une DLL standard Windows en VB6 [Tutoriel]


Sujet :

VB 6 et antérieur

  1. #1
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 20 027
    Points
    20 027
    Par défaut [Commentez] Créer une DLL standard Windows en VB6
    Créer une DLL Windows avec Visual basic

    L'une des restrictions la plus couramment, reprochée à Visual Basic 6, est l'impossibilité de créer une DLL windows standard.
    Cet article vous démontre qu'avec quelques petites astuces ce qui semble au premier abord impossible devient possible.

    Vous pouvez utiliser cette discussion pour émettre vos commentaires sur cet article.

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Salut bbil,

    si je puis me permettre.

    Dans le chapitre 2

    En outre, le point d'entrée n'ait pas exécuté
    je pense que le verbe être devrait être utilisé
    En outre, le point d'entrée n'est pas exécuté
    Dans chapitre 5, cette phrase manque de clarté

    Ainsi, après examen de la table de l'exportation d'un DLL d'ActiveX, le résultat de l'interception l'appel au compilateur par Visual Basic, le résultat de l'interception de l'appel à l'éditeur de liens par Visual Basic
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 20 027
    Points
    20 027
    Par défaut
    merci Jean-Luc je corrige ...

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Une petite question, concernant le fichier de définition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NAME MathLib
    LIBRARY MathMod
    DESCRIPTION "Add-on Library of Mathematical Routines"
    EXPORTS DllMain @1
            Increment @2
            Decrement @3
            Square @4
    qu'est-ce que l'entrée MathMod signifie? En quoi cela est il important ?
    il semble qu'il ne soit utilisé nulle part ailleurs, mais sait on jamais !
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 20 027
    Points
    20 027
    Par défaut
    Une piste : NAME et LIBRARY

    donc NAME permettrai de définir le nom du fichier DLL et LIBRARY le nom de la bibliothèque de fonction.

    à creuser j'en connais pas beaucoup plus sur le fonctionnement des fichiers .def

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : novembre 2006
    Messages : 93
    Points : 99
    Points
    99
    Par défaut
    salut à tous
    je n'ai pas réussi à mettre en oeuvre ce cours. J'arrive à générer la dll mais elle plante sous access 2007 et aucune réaction dans vb6.
    Pourriez-vous ajouter le fichier de l'exemple?
    Merci

    Edit:
    J'ai enfin réussi mais lorsque les fonctions reçoivent en paramètre du string il y a plantage sous Access. Pour les numérique et booléen ça marche bien.

    On dit qu'il s'agit d'un problème de conversion UNICODE-ANSI
    Que faut-il faire pour que ça marche?

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 20 027
    Points
    20 027
    Par défaut
    Citation Envoyé par samloba Voir le message
    salut à tous
    je n'ai pas réussi à mettre en oeuvre ce cours. J'arrive à générer la dll mais elle plante sous access 2007 et aucune réaction dans vb6.
    Pourriez-vous ajouter le fichier de l'exemple?
    Merci
    J'ai rajouté "mes fichiers" créés en suivant les instructions issues de cette traduction : ici

    Citation Envoyé par samloba Voir le message
    Edit:
    J'ai enfin réussi mais lorsque les fonctions reçoivent en paramètre du string il y a plantage sous Access. Pour les numérique et booléen ça marche bien.

    On dit qu'il s'agit d'un problème de conversion UNICODE-ANSI
    Que faut-il faire pour que ça marche?
    as tu le même problème en VB6 ?

  8. #8
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Bonjour,

    Je suis très impressionné par cet article... Bravo pour cette réussite !

    Je suis prêt à me lancer dans l'aventure, mais cette procédure fonctionnera-t'elle avec Visual Studio Express, donc une dll .NET ?

    Mon contexte de développement de la DLL est le suivant:

    Microsoft Visual Studio Express 2008 (je suis prêt à installer la version Microsoft Visual Studio Express pour Desktop 2012 si nécessaire)

    Le but est d'appeler la DLL depuis un programme en VBA développé sous Excel 2007.

    Actuellement, sans avoir suivi le tutoriel, j'ai bien sur la fameuse erreur n°453 : Point d'entrée d'une DLL introuvable...

    Je suis impatient de pouvoir créer ce fameux point d'entrée... Merci d'avance pour votre réponse.

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  9. #9
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 403
    Points : 5 759
    Points
    5 759
    Par défaut
    mais cette procédure fonctionnera-t-elle avec Visual Studio Express, donc une dll .NET ?
    Du moment que la méthode décrite par bbil(que je salut) prend en charge C/C++,elle devrait en principe fonctionner avec les environnements vb.net et V.S.E(à vérifier avec les pro dans ce domaine)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le but est d'appeler la DLL depuis un programme en VBA développé sous Excel 2007
    Dans ce cas, je préfèrerais une DLL activeX à une DLL standard, car une fois référencée, une DLL activeX me permet de voir les différents objets, routines et classes qu'elle contient quand je tape le nom de la classe(ou l'objet) déclaré suivi par un point(.), alors que pour une DLL standard, on ne peut utiliser que la fonction ou procedure déclarée(explicitement) et ce SI ON CONNAIT EXACTEMENT SA STRUCTURE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j'ai bien sur la fameuse erreur n°453,: Point d'entrée d'une DLL introuvable...
    En principe Dependency Walker permet de voir les points d'entrée des différentes fonctions et procedures se trouvant dans une DLL qu"elle soit standard ou ActiveX.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  10. #10
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Merci l'autodidacte pour ta réponse plutôt optimiste !

    Cependant, la méthode décrite par bbil ne prend en charge C/C++ comme tu le dis, elle est par contre dédiée à Vb6.

    Concernant ta remarque sur une DLL standard (sans autocompletion), ça me va très bien. Je ne souhaite pas faire une DLL pour rendre le codage plus confortable, mais pour isoler/protéger certaines partie du code hors du VBA.

    J'ai été heureux de retrouver le Dependency Walker que j'avais utilisée il y a longtemps ... mais malheureusement il ne peut pas interpréter ma dll (blocage de l'interface lors de l'ouverture). Je pense que le problème est toujours le point d'entrée que windows ne trouve pas. Quand ma DLL deviendra exploitable par le Dependency Walker, je pense qu'elle fonctionnera également dans VBA...

    Si bbil passe par là, ma question reste entière : la méthode vb6 est-elle applicable à vbnet, ou bien vbnet a-t'il fourni d'autres techniques pour rendre une dll exploitable par un "Private Declare Function ..." ?

    Je vous joins ma dll :
    Elle contient la fonction AfficheDuree(ByVal lngSeconde As Long) As String qui renvoit simplement une chaine de caractères à partir d'un nombre de secondes.
    J'aimerais pouvoir l'utiliser dans VBA en déclarant
    Private Declare Function AfficheDuree Lib "X-Book.dll" (ByVal lngSeconde As Long) As String
    Fichiers attachés Fichiers attachés

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  11. #11
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 403
    Points : 5 759
    Points
    5 759
    Par défaut
    Salut;
    C'était mal dit de ma part ; j'aurais dû dire :"Du moment que la méthode décrite ..... est prise en charge par Visual Studio 2005...."

    Pour ce qui est prise en charge de la méthode par les environnements après VB6, voici un LIEN qui pourrait t'aider à avancer.

    Juste après Visual Studio 2005, il y a un menu déroulant contenant Visual Studio 2008, Visual Studio 2010; Visual Studio 2012 et Visual Studio 2013
    Choisis donc ce qui te convient et tu auras l'explication concernant l'EDI à utiliser.

    Maintenant pour Dependency Walker, Il sort le message d'avertissement : Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module. Il manque très probablement au moins une instruction dans la section Exports dans le fichier .def ou une erreur d'instruction...
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 718
    Points : 5 459
    Points
    5 459
    Par défaut
    Bonjour,
    Citation Envoyé par Golard Voir le message
    Actuellement, sans avoir suivi le tutoriel, j'ai bien sur la fameuse erreur n°453 : Point d'entrée d'une DLL introuvable...
    Peut-être une piste, tu peux regarder cette discussion Créer des exécutables et les lier qui concerne une DLL VB.NEt avec un programme VB6.
    Tu verras que qu'au post8 je rencontre la dite erreur. Et au post10 comment j'ai procédé pour résoudre le souci. Après, je ne sais pas si on peut faire l'équivalent avec VBA d'excel.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  13. #13
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,


    Peut-être une piste, tu peux regarder cette discussion Créer des exécutables et les lier qui concerne une DLL VB.NEt avec un programme VB6.
    Tu verras que qu'au post8 je rencontre la dite erreur. Et au post10 comment j'ai procédé pour résoudre le souci. Après, je ne sais pas si on peut faire l'équivalent avec VBA d'excel.
    Bonjour rv26t,

    Merci pour ton intervention.
    J'ai étudier le post que tu as référencé en détail et il me semble que tu y as fait un travail remarquable
    J'ai bien sur hâte de pouvoir le mettre en oeuvre et indiquer dans le post si la solution fonctionne (ou non) pour un appel depuis VBA (Office Excel 2007).
    Pour l'instant je suis bloqué car j'utilise la version Microsoft Visual Studio Express 2008 ... et donc la case à cocher dont tu parles "inscrire pour COM Interop" n'existe pas dans l'onglet Compiler des propriétés du projet. Résultat : pour l'instant impossibilité de générer la bibliothèque de type .tlb
    Je suis cependant en train d'étudier l'article http://msdn.microsoft.com/fr-fr/library/bb727303.aspx qui semble apporter une solution.
    J'espère avoir rapidement de bonnes nouvelles,

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 14 008
    Points : 20 027
    Points
    20 027
    Par défaut
    Bonjour,


    tout d'abords merci pour les avis sur l'article, mais je n'ai fait que le traduire l'auteur est : Ron Petrusha


    pour créer une DLL utilisable en VBA tu peu aussi t'inspirer de :

    http://bbil.developpez.com/tutoriel/...reRequis#LII-A

  15. #15
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Bonjour,

    J'ai finalement créé un sujet dédié à mon problème pour essayer d'y trouver une solution.

    Le but est de créer une DLL Vb.net (développée sous Visual Basic EXPRESS 2008) utilisable dans une macro VBA sous Excel Office 2007.

    Le post est ici : http://www.developpez.net/forums/d14...ser-macro-vba/

    N'hésitez pas à m'aider si vous pouvez !!!

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : octobre 2009
    Messages : 31
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    Moi, j'aurai juste une question concernant cette ligne dans le fichier DEF:
    DESCRIPTION "Add-on Library of Mathematical Routines"
    Quand on fait comme dans l'exemple donné, cette info ne semble pas passer dans la DLL, est ce mon imagination ou est ce la commande passé en paramètre qui serait en erreur (voir incomplète)?
    Il me serait agréable d'en connaitre la raison.

    En revanche, j'ai testé et parfaitement réussi a faire de vrai Dll même avec VB5.

    Je me dois de rajouter une autre remarque plus détaillé de mon constat:
    Dans Visual Basic, la description apparaît correctement.
    Dans l'explorateur, en revanche, la description est vide.
    Ce pourait-il, qu'une info doit être ajouté pour le compilateur ?
    En revanche, dans visual basic, quand il s'agit d'une dll ActiveX, cette description apparait bien, même dans l'explorateur windows.

    Si quelqu'un connait la réponse a ce pourquoi du comment, je suis preneur . Merci.

    PS: j'ai "créer" un petit utilitaire qui utilise la fonction : "Créer une DLL standard Windows en VB6"
    Je vous pose le lien: http://www.planetsourcecode.com/vb/s...75633&lngWId=1

Discussions similaires

  1. [Article] Créer une Dll standard avec VB6
    Par medkarim dans le forum Vos contributions VB6
    Réponses: 1
    Dernier message: 29/06/2009, 07h19
  2. Passage d'un tableau d'une DLL standard à VB6
    Par andrebernard dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/05/2009, 14h53
  3. Créer une dll enregistrable avec c:\WINDOWS\system32\regsvr32.exe
    Par Immobilis dans le forum Général Dotnet
    Réponses: 13
    Dernier message: 09/03/2009, 21h37
  4. Créer une dll Windows (de stockage ressource) ?
    Par kidpaddle2 dans le forum Windows
    Réponses: 8
    Dernier message: 17/09/2006, 15h40
  5. [VB6]comment créer une dll
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/04/2006, 14h32

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