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] Comment faire une dll classique ?


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut [VB6] Comment faire une dll classique ?
    Bonjour.

    Voilà, j'ai un programme C# qui fait appel à une DLL écrite en VB. Le problème, c'est qu'au moment de l'exécution de la fonction qui est dans la dll, une erreur apparaît indiquant que le point d'entrée de celle-ci n'est pas trouvé.

    Que puis-je faire pour résoudre ce problème?
    Quelqu'un a-t-il une idée?
    merci

    doudouallemand
    développeur en folie cherche à ... développer encore plus

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Hum... Le point d'entrée, c'est pour ton programme, donc je vois pas pourquoi tu aurais une erreur sur le point d'entrée de la DLL



    Dans ton programme, tu as bien un point d'entrée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static void Main(...)

    :

  3. #3
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    oui, dans mon programme j'ai bien un "main", mais pas dans ma DLL.
    Dedans, j'ai juste une fonction avec 3 autres sous-fonctions de celle-ci.

    Je ne comprend pas

    merci
    développeur en folie cherche à ... développer encore plus

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Montre nous le code qui déclare et appelle cette fonction
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Morpheus
    Hum... Le point d'entrée, c'est pour ton programme, donc je vois pas pourquoi tu aurais une erreur sur le point d'entrée de la DLL
    Hum, une fonction exporté par une dll à bien un point d'entrée, par exemple dans l'api Windows pour afficher une boite de dialogue c'est MessageBoxA( ou W) de user32.dll, le point d'entrée de la fonction est donc MessageBoxA(W) et je crois que c'est de celà qu'il parle.

    Vérifie donc le nom de la fonction que tu importes depuis la dll, si nécéssaire utilise un outil comme DependencyWalker afin de vérifier le nom des fonctions exportées par ta dll

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par smyley
    Citation Envoyé par Morpheus
    Hum... Le point d'entrée, c'est pour ton programme, donc je vois pas pourquoi tu aurais une erreur sur le point d'entrée de la DLL
    Hum, une fonction exporté par une dll à bien un point d'entrée, par exemple dans l'api Windows pour afficher une boite de dialogue c'est MessageBoxA( ou W) de user32.dll, le point d'entrée de la fonction est donc MessageBoxA(W) et je crois que c'est de celà qu'il parle.
    Oui, tu peux d'ailleurs utiliser l'attribut EntryPoint, lorsque tu fais du P/Invoke, pour spécifier quelle fonction a appeller.

    MessageBox n'est qu'un simple alias vers MessageBoxA (ou l'inverse, je sais plus )

    Dans ce cas, en effet, si aucune de ces fonctions n'est marquée comme "principale" alors cela peut-être la cause du pb

  7. #7
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Morpheus
    MessageBox n'est qu'un simple alias vers MessageBoxA (ou l'inverse, je sais plus )
    en effet, MessageBox pointe vers MessageBoxA pour les Windows Ansi et MessageBoxW sur les Windows Unicode. Si on éssai d'importer directement MessagBox depuis user32.dll :-> boom ! point d'entrée introuvable

  8. #8
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    Tout d'abord, merci à tous pour vos réponses.

    Voici la déclaration de ma fonction dans mon code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [DllImport("DLL_Multilangue_DB_Maintenance.dll",EntryPoint="DllMain")]
    		public static extern void DllMain(System.String sServeur , System.String sSource_fichier_excel , System.String sLogin , System.String sPassword );

    Et voici son utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DllMain(nom_serveur,adresse_fichier_langue,nom_nom_connexion,nom_password);

    Quant à la fonction qui est dans la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Static Sub DllMain(ByRef sServeur As String, ByRef sSource_fichier_excel As String, ByRef sLogin As String, ByRef sPassword As String)
    ...
    End Sub
    Donc, d'après ce que vous avez dit, cela devrez marcher non? :
    merci encore
    développeur en folie cherche à ... développer encore plus

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    DllMain ne serait-il pas un nom réservé comme main ?
    Il faudrait essayer de changer de nom.
    On ne peut pas faire boire un âne qui n'a pas soif.

  10. #10
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    En fait, j'ai mis ce nom là car j'ai vu sur Internet qu'il est normalement reconnu comme point d'entrée d'une DLL car avant, j'avais un autre nom (non réservé)
    développeur en folie cherche à ... développer encore plus

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Justement, les DLLs non managées doivent posséder une fonction qui est un point d'entrée appelée lors du chargement (et déchargement) de la DLL.
    Il me semble que cette fonction est obligatoire pour la compilation.
    Les autres fonctions doivent être déclarée avec un mot clé __export (de mémoire).
    Cette DLL est-elle obligatoirement non managée ?
    On ne peut pas faire boire un âne qui n'a pas soif.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Après relecture, il me semble que tu essaie d'utiliser une dll managée comme une dll non managée.
    Une dll managée est un Assembly, il faut inclure une référence à cette dll dans les propriétés du projet et ensuite utilliser les fonctions en précisant leur espace de nomage.
    On ne peut pas faire boire un âne qui n'a pas soif.

  13. #13
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    En fait, je ne connais pas la différence entre managée et non managée.

    J'ai simplement, sous VB6, fait un nouveau projet "DLL Active X" et tapé cela
    développeur en folie cherche à ... développer encore plus

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Une DLL ActiveX est une forme particulière.
    Il faut utiliser une DLL standard si on ne programme pas un objet ActiveX.
    Le type de projet est peut-être "bibliothèque ...".
    On ne peut pas faire boire un âne qui n'a pas soif.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Désolé, je ne connais pas VB6.
    On ne peut pas faire boire un âne qui n'a pas soif.

  16. #16
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par doudouallemand
    je regarde ça avec un projet bibliothèque mais le problème, c'est que VB6 ne propose pas ce type de projet!!! :

    Et que fais alors cette question dans les forums DotNet
    Permet moi en tant qu'EXVBCiste de te reprendre si tu persistes à coder VB6 alors que VB.Net existe
    Sinon dis moi si je dois deplacer ta question dans un forum plus approprié
    :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  17. #17
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par neguib
    Et que fais alors cette question dans les forums DotNet
    Moi j'avais compris qu'il voulait utiliser une dll Win32 écrite en VB6 depuis C# ...

  18. #18
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par smyley
    Citation Envoyé par neguib
    Et que fais alors cette question dans les forums DotNet
    Moi j'avais compris qu'il voulait utiliser une dll Win32 écrite en VB6 depuis C# ...
    Oui bien vu, tu dois avoir raison mais je t'avoue que les réponses de doudouallemand m'embrouille un peu
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  19. #19
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    Bonjour à tous.

    Tout d'abord, excusez moi pour mon absence un peu longue.

    Ensuite, je répond aux questions :

    En fait, j'ai mis cette question en C# car, à la base, j'avais un problème d'appel d'une DLL que j'ai créé AVEC du code C#. C'est la DLL que j'ai écrite avec VB6. Ensuite, je n'utilise pas VB.NET car, en fait, ma DLL correspond à un lot DTS sous SQL Server 2000 exporté en VB et qui n'est pas reconnu par VB.NET. J'ai donc du, pour assurer la compatibilité du code récupérer d'SQL Server, utiliser VB6. Et maintenant, mon problème devient donc la question suivante : comment créer proprement une DLL qui puisse être appelé depuis mon code C# à partir de VB6, question que je vais donc poser sur le forum VB6.

    Voilà, j'espère que mes explications ont été claires.

    Merci à tous.

    doudouallemand
    développeur en folie cherche à ... développer encore plus

Discussions similaires

  1. comment faire une DLL
    Par furax51 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/10/2008, 13h31
  2. Comment faire une DLL orienté objet?
    Par Mikmacer dans le forum C++
    Réponses: 6
    Dernier message: 03/01/2008, 21h08
  3. [VB6]Comment faire une ListBox a 2 Colonnes
    Par patoch76 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/05/2006, 22h12
  4. [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
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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