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.NET Discussion :

Créer des exécutables et les lier [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut Créer des exécutables et les lier
    Bonjour,

    Je voudrai savoir comment faire pour créer un exécutable à partir de mon programme en VB.NET, j'ai essayer de publier mon programme mais la seule chose que j'ai réussi à avoir est un setup !!

    Mon but final et de générer deux exécutable, l'un est un simulateur et l'autre est un gestionnaire d'alarme que je voudrai lier à mon simulateur par un bouton.

    Merci d'avance pour vos solutions.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Je voudrai plus réellement, créer a long terme plusieurs simulateurs qui utilise le même gestionnaire d'alarme sachant que les simulateurs n'ont pas le même nombres d'alarmes, je voudrai à travers une variable "i0=Nb d'alarme" qui se trouve dans mon simulateur, pouvoir informé mon gestionnaire d'alarme pour ne pas avoir a créer un gestionnaire pôur chaque simulateur.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Je voudrai aussi si possible transférer les données de mes alarmes qui se trouve dans le simulateur vers le gestionnaire d'alarme ainsi que d'autre variable important qui me permet de savoir si une alarme est activé ou pas suivant certains seuils qui sont calculés dans le simulateur.

    Je me pose la question si je doit passé sa dans une BDD ou alors les laisser en variable globale pour l'instant. Car pour l'instant, tous ce trouve dans un module sous forme de variable globale.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'ai reussi à avoir mon exécutable grace à setup ^^

    Maintenant je vais essayer de séparer mon gestionnaire d'alarme et mon simulateur pour essayer ensuite de les relier mais je voit tjs pas comment je vais relier toute mes variables !!

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Si tous tes simulateurs fonctionnent de la même façon.
    Tu crés un seul logiciel simulateur (qui fait aussi gestionnaire d'alarme) qui se paramêtre au lancement.
    Tu places le choix du nombre d'alarme dans un fichier de config ou en basse de données.
    Au lancement du logiciel tu proposes à l'utilisateur une liste avec le nombre d'alarmes à traiter.

    Sinon DLL gestion alarme + EXE simulateur.

    A+, Hervé.

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    En faite je viens d'apprendre que les simulateurs existe deja en VB6 et que mon gestionnaire d'alarme est en visual studio 2010 PRO.

    Donc je vois vraiment pas comment faire surtout que mon gestionnaire est autonome et qu'il doit être alimenté avec de nombreuse variable pour marcher.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par dragondumond Voir le message
    En faite je viens d'apprendre que les simulateurs existe deja en VB6 et que mon gestionnaire d'alarme est en visual studio 2010 PRO.

    Donc je vois vraiment pas comment faire surtout que mon gestionnaire est autonome et qu'il doit être alimenté avec de nombreuse variable pour marcher.
    Combien existe-t-il de simulateurs ?
    As-tu les sources vb6 ? (normalement oui)
    Sous quelle forme géraient-t-il les alarmes ?

    Quand un simulateur lance le gestionnaire d'alarme atend-il un retour ?
    Si "non" tu généres un fichier depuis le simulateur et tu lances le gestionnaire qui lira ce fichier.

    Sinon quelles sont les données (nombre, type, ...) les intéractions entre simulateur et gestionnaire d'alarme ?

    Et l'idée de faire passer les simulateurs sous VB.net ?

    A+, Hervé.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Une piste à creuser.

    Générer une DLL en VB.net et la référencer en vb6.

    La DLL en VB.net
    Executer Visual Studio en tant qu'administrateur.
    J'ai créé une procédure LanceAlarme dans un module qui utilise une classe alarme (un squelette de classe) pour test.
    Projet
    propriété
    compiler
    -> bin\release
    -> cocher : inscrire pour COM interop
    Application
    ->bouton information de l'assembly
    -->cocher : rendre l'assembly visible par COM

    Générer
    un fichier .dll et un fichier .tlb sont générés.


    L'exe en vb6
    Projet
    référence... -> parcourir -> sélectionner le fichier .tlb

    la déclaration dans un module doit ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Sub VB6LanceAlarme Lib "D:\appli\Alarmes.dll" Alias "LanceAlarme" ()
    Mais à l'exécution j'ai
    Erreur d'Exécution 453 : Point d'entré LanceAlarme d'une DLL introuvable dans D:\appli\alarmes.dll

    Il ne doit pas manquer grand chose.

    C'est un peu tard, je te laisse creuser si tu souhaites.

    A+, Hervé.

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Avec dumpbin normalement on devrait voir les sub et fonction exportées.
    d:\appli>dumpbin alarmes.dll /exports
    Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
    Copyright (C) Microsoft Corporation. All rights reserved.


    Dump of file alarmes.dll

    File Type: DLL

    Summary

    2000 .reloc
    2000 .rsrc
    2000 .sdata
    2000 .text
    C'est que la fonction n'est pas exporté par la DLL. Il faut voir comment faire cela dans la dll vb.net pour un exe qui l'appelera par COM (parceque entre exe et dll en .net cela fonctionne)

    Bon, apparement, il faut passer par une classe interface.

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Il faut donc créer un projet de type bibliothéque.

    Nom du projet : Alarmes
    Nommer la classe : Alarme

    Placer ce code dans la classe

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    ''' <summary>L'interface représente un Wrapper de la classe Alarme pour les programmes exe vb6.</summary>
    ''' <remarks>Sera exportée dans la bibliothéque de type créé dans l'assembly.</remarks>
    Public Interface IAlarmes
      Property Nom() As String
      Sub GestAlarme()
    End Interface
     
    ''' <summary>La classe alarme visible.</summary>
    ''' <remarks>Les éléments public seront visible. 
    ''' Bien implémenter toutes les définitions de l'interface.</remarks>
    Public Class Alarme
      Implements IAlarmes ' contrat entre classe et interface.
     
      Private mNom As String
     
      ''' <summary>Une propriété pour exemple</summary>
      ''' <value>La nouvelle valeur de la propriété.</value>
      ''' <returns>La valeur de la propriété.</returns>
      ''' <remarks>Bien implémenter l'interface.</remarks>
      Public Property Nom() As String _
      Implements IAlarmes.Nom ' implémentation de la propriété définie dans l'interface
        Get
          Return mNom
        End Get
        Set(ByVal value As String)
          mNom = value
        End Set
      End Property
     
      Public Sub New()
     
      End Sub
     
      ''' <summary>Une procedure de test.</summary>
      ''' <remarks>Bien implémenter l'interface.</remarks>
      Public Sub GestAlarme() _
      Implements IAlarmes.GestAlarme ' implémentation de la procédure définie dans l'interface
        MsgBox("alarme")
      End Sub
     
    End Class
    Plusieurs éléments sont à compléter au niveau des propriétés du projet
    * Application
    bouton information de l'assembly
    cocher : rendre l'assembly visible par COM
    Titre : Alarmes
    Description : gestion des alarmes (version dll.net) ce point est important, c'est ce que tu verras dans le référencement de vb6 pour l'ajout de la dll au projet.

    * Compiler
    cocher : inscrire pour COM Interop
    cocher : générer le fichier de documentation (ça c'est pour toi générera un fichier XML des commentaires de la classe)

    Les éléments cochés pour com évitent des manip dans l'utilitaire en ligne de commande.
    J'ai aussi signé l'assembly, je ne sais pas si cela est utile, mais c'est conseillé.

    Générer le projet.
    Il génére 4 fichiers
    Alarmes.dll
    Alarmes.tlb
    Alarmes (.xml) Document XML -> pour toi
    Alarmes program debug databse (inutile pour nous)

    Placer Alarmes.dll et Alarmes.tlb dans un répertoire qui sera avec ton exe.

    Dans vb6
    créé un projet exe
    sur form1 placer un bouton
    Dans le code
    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
    Option Explicit
     
    Private monAlarme As Alarmes.Alarme ' la classe vb.net
    Private monAlInt As Alarmes.IAlarmes ' l'interface pour vb6
     
    Private Sub Form_Load()
     Set monAlarme = New Alarmes.Alarme ' implémente la classe alarme (nous avons un objet alarme)
     Set monAlInt = monAlarme ' récupère l'interface à partir de l'objet alarme (permet d'avoir l'Intellisense ce qui est très pratique)
    End Sub
     
    ' programmation classique (miracle)
    Private Sub Command1_Click()
      monAlInt.Nom = "alarme1" ' attribue un nom
      Call monAlInt.GestAlarme ' appele la sub
    End Sub
    * Projet
    Référence
    parcourir
    dans le répertoire des dll sélectionner Alarmes.tlb
    La référence est rajoutée.
    Il faut rechercher "gestion des alarmes (version dll.net)" et la cocher.

    générer
    Normalement cela fonctionne. (si il y a un problème soit tu as fait une erreur ou j'ai oublié d'indiquer un élément)

    [Mode humour]
    Ben maintenant au boulot. , moi
    [/Mode humour]


    J'ai passé pas mal de temps pour trouver, mais c'était un joli challenge.
    Tu en as d'autres comme ça ?

    A+, Hervé.

  11. #11
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Merci bcp pour ces réponses.

    Alors il y a plein de truc que j'ai pas compris mais c'est pas grave, je suis un débutant et j'essaye d'y aller petit à petit.

    Alors pour résumer un peu mon problème :

    J'ai toujours pas le simulateur en VB6 car mon tuteur na pas le temps de me le passer et j'essaye toujours de réaliser ma manipulation entre deux projet en Visual studio pour commencer.

    J'ai pensé à utiliser une BDD pour connecté les deux projets.
    Au lancement de mon simulateur j'enregistre les données de mes alarmes une seule fois dans une BDD que je lis avec mon gestionnaire d'alarme et les enregistres sur des variables globale internet au gestionnaire pour ne pas avoir à surcharger mon programme avec des lecture/écriture inutile.
    Ensuite dans le timer de mon simulateur, j’écris les résultats de ma simulation dans une autre table de ma BDD que je relis dans le timer dans mon gestionnaire pour vérifier si je dois déclencher une alarme ou pas.

    Alors perso, j'ai réussi a crée une BDD en local, j'ai aussi réussi à écrire dans cette BDD et à relire mes données sans problème avec des requêtes et sans utiliser le dataset car je doute bien qu'a long terme je devrai m'en passé lorsque je vais écrire en VB6.

    Je voudrai bien pouvoir exécuter mon projet gestionnaire d'alarme sur un clic de bouton dans le simulateur et sa je sais pas faire encore.

    Ensuite je verrai petit à petit comment je vais construire le tous déjà sur Visual Studio et par la suite avec VB6 mais j'en suis pas encore la et j'ai toute la semaine pour y arriver.

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    PS: Je suis automaticien de base, et non informaticien donc dans mon projet je dois réaliser un gestionnaire avec les moyens du bord et les moyens sont assez limités, par la suite, je le retouche plus, après sa va plus être des modification sur mon simulateur au niveau mathématique donc pas besoin de faire un truc aussi optimisé.

  13. #13
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'essaye de faire ce que tu ma dit dans ton précédent message, j'ai pris le temps de lire et sa l'air assez facile a faire vu té indication bien détaillé mais j'arrive pas a crée un projet vb6 en exe avec mon Visual studio 2010.

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'ai commencer à réaliser mon programme sous Visual Studio et je commence à me rendre compte que tu ma réaliser un programme intelligent qui me permet d'éviter d'utiliser une BDD donc je suis super content car sa va me faire beaucoup de travail en moins si j'arrive à tous faire comme je le souhaite sans avoir a trop bidouillé dans le programme VB6 de mon simulateur.

  15. #15
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Je crois que je viens de comprendre qu'il faut que j'installe Visual Basic pour faire un projet en VB6 donc je suis entrain d'installer VIsual Basic Express.

  16. #16
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'ai créer ma classe Alarmes dans un projet de type bibliothèque, j'avais déjà une classe Alarmes dans mon ancien projet mais cette class était dans un module mais j'avais aussi deux Forms qui gèrent mes alarmes genre verification, trie, etc....

    Ma question est la suivante :

    Si je recréer mes Forms avec ma classe Alarmes, est-ce que ses Forms seront exécuter dans mon programme VB6 ou pas? ou j'aurai juste importer la class sans rien d'autre ?

  17. #17
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Si j'ai bien compris, les fichiers Alarmes.dll et Alarmes.tlb contiennent le projet Alarmes donc les Forms aussi mais comment faire appel aux Forms dans en VB6 !! Je vais déjà essayer de découvrir le VB6 et après je verrai !!

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par dragondumond Voir le message
    J'essaye de faire ce que tu ma dit dans ton précédent message, j'ai pris le temps de lire et sa l'air assez facile a faire vu té indication bien détaillé mais j'arrive pas a crée un projet vb6 en exe avec mon Visual studio 2010.
    Tu ne peux pas créer un exe vb6 avec Visual studio 2010 .net.

    Citation Envoyé par dragondumond Voir le message
    J'essaye de faire ce que tu ma dit dans ton précédent message, j'ai pris le temps de lire et sa l'air assez facile a faire vu té indication bien détaillé mais j'arrive pas a crée un projet vb6 en exe avec mon Visual studio 2010.
    Dans vb6, tu n'auras a rajouter que :
    2 lignes de définitions pour les variables de classes
    2 lignes d'implémentation des objets.
    1 ligne de code d'exécution pour lancer le gestionnaire d'alarmes. + un certain nombre de lignes pour passer les info.

    Citation Envoyé par dragondumond Voir le message
    Je crois que je viens de comprendre qu'il faut que j'installe Visual Basic pour faire un projet en VB6 donc je suis entrain d'installer VIsual Basic Express.
    Il faut visual basic 6.

    [Edit pour complément d'info]
    Si tu as une version pro de Visual Studio 2010, tu as le droit de télécharger les versions antérieures, donc tu peux télécharger VB6 sur le site de microsoft (avec tes références clients d'abonnement et de téléchargement de mise à jour)
    [/Edit fin]

  19. #19
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    J'ai séparé en 2 parcequ'il y avait beacoup de questions


    Citation Envoyé par dragondumond Voir le message
    J'ai créer ma classe Alarmes dans un projet de type bibliothèque, j'avais déjà une classe Alarmes dans mon ancien projet mais cette class était dans un module mais j'avais aussi deux Forms qui gèrent mes alarmes genre verification, trie, etc....

    Ma question est la suivante :

    Si je recréer mes Forms avec ma classe Alarmes, est-ce que ses Forms seront exécuter dans mon programme VB6 ou pas? ou j'aurai juste importer la class sans rien d'autre ?
    Le plus simple est de placer ce qui était dans le module, Dans la classe. Après, l'autre solution, tu peux aussi référencer le module, mais cela va compliquer ton travail.

    Les forms pourrons être appelé depuis la classe Alarmes (vb.net) référencée par l'exe vb6.
    Ex: j'ai rajouté une form (frmAlarmes) et sur cette form -> 2 labels (label1, et label2 : les noms ne sont pas explicite, c'est juste pour l'exemple)
    J'ai aussi rajouté un paramètre (UnParam) à la procédure (GestAlarme; vb.net) qui sera appelé par l'exe vb6.
    Dans la dll vb.net.
    La procédure d'appel qui ouvre les fenêtres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      ''' <summary>Une procedure de test avec fenêtre.</summary>
      ''' <param name="UnParam">Un paramètre provenant de vb6.</param>
      ''' <remarks>Le paramètre vient compléter une propriété, l'autre propriété à été directement renseigné par vb6.</remarks>
      Public Sub GestAlarme(ByVal UnParam As String) _
      Implements IAlarmes.GestAlarme ' implémentation de la procédure définie dans l'interface
        mParam = UnParam ' met à jour la propriété avec le paramètre
        Dim fenAlarmes As frmAlarmes = New frmAlarmes
        fenAlarmes.Label1.Text = mParam
        fenAlarmes.Label2.Text = mNom
        fenAlarmes.Show()
      End Sub
    La nouvelle propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      Private mParam As String
      ''' <summary>Une propriété pour exemple</summary>
      ''' <value>La nouvelle valeur de la propriété.</value>
      ''' <returns>La valeur de la propriété.</returns>
      ''' <remarks>Bien implémenter l'interface.</remarks>
      Public Property Param() As String _
      Implements IAlarmes.Param ' implémentation de la propriété définie dans l'interface
        Get
          Return mParam
        End Get
        Set(ByVal value As String)
          mParam = value
        End Set
      End Property
    Elle pourrai aussi être mise à jour directement par vb6. Mais comme cela tu as l'exemple avec les 2 possibilités.

    La nouvelle définition de l'interface (contrat entre exe vb6 et bibliothéque vb.net)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ''' <summary>L'interface représente un Wrapper de la classe Alarme pour les programmes exe vb6.</summary>
    ''' <remarks>Sera exportée dans la bibliothéque de type créé dans l'assembly.</remarks>
    Public Interface IAlarmes
      Property Nom() As String
      Property Param() As String
      Sub GestAlarme(ByVal UnNom As String)
    End Interface


    Dans l'exe vb6.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private monAlarme As Alarmes.Alarme ' la classe vb.net
    Private monAlInt As Alarmes.IAlarmes ' l'interface pour vb6
     
    Private Sub Form_Load()
     Set monAlarme = New Alarmes.Alarme ' implémente la classe alarme (nous avons un objet alarme)
     Set monAlInt = monAlarme ' récupère l'interface à partir de l'objet alarme (permet d'avoir l'Intellisense ce qui est très pratique)
    End Sub
     
    ' programmation classique : x lignes( petit 1) pour les données, 1 ligne(petit 2) qui lance la gestion des alarmes
    Private Sub Command1_Click()
      monAlInt.Nom = "Voici un élément (venant de vb6) passé à une propriété de la classe Alarmes." ' affecte un texte à une propriété (nom) de la classe alarme (1) 
      Call monAlInt.GestAlarme("Voici un paramètre (venant de vb6) passé à la fonction GestAlarme.") ' appele la sub avec un paramètre qui sera placé dans une propriété de la classe Alarme par la fonction GestAlarme de classe Alarme. (2)
    End Sub
    J'ai placé la création des objets dans le load afin de pouvoir accéder aux propriétés de la classe (vb.net) Alarmes, après que celle ci ai effectué son travail.



    Code complet de la dll vb.net
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    ''' <summary>L'interface représente un Wrapper de la classe Alarme pour les programmes exe vb6.</summary>
    ''' <remarks>Sera exportée dans la bibliothéque de type créé dans l'assembly.</remarks>
    Public Interface IAlarmes
      Property Nom() As String
      Property Param() As String
      Sub GestAlarme(ByVal UnNom As String)
    End Interface
     
    ''' <summary>La classe alarme visible.</summary>
    ''' <remarks>Les éléments public seront visible. 
    ''' Bien implémenter toutes les définitions de l'interface.</remarks>
    Public Class Alarme
      Implements IAlarmes ' contrat entre classe et interface.
     
      Private mNom As String
      ''' <summary>Une propriété pour exemple</summary>
      ''' <value>La nouvelle valeur de la propriété.</value>
      ''' <returns>La valeur de la propriété.</returns>
      ''' <remarks>Bien implémenter l'interface.</remarks>
      Public Property Nom() As String _
      Implements IAlarmes.Nom ' implémentation de la propriété définie dans l'interface
        Get
          Return mNom
        End Get
        Set(ByVal value As String)
          mNom = value
        End Set
      End Property
     
      Private mParam As String
      ''' <summary>Une propriété pour exemple</summary>
      ''' <value>La nouvelle valeur de la propriété.</value>
      ''' <returns>La valeur de la propriété.</returns>
      ''' <remarks>Bien implémenter l'interface.</remarks>
      Public Property Param() As String _
      Implements IAlarmes.Param ' implémentation de la propriété définie dans l'interface
        Get
          Return mParam
        End Get
        Set(ByVal value As String)
          mParam = value
        End Set
      End Property
     
      Public Sub New()
     
      End Sub
     
      ''' <summary>Une procedure de test avec fenêtre.</summary>
      ''' <param name="UnParam">Un paramètre provenant de vb6.</param>
      ''' <remarks>Le paramètre vient compléter une propriété, l'autre propriété à été directement renseigné par vb6.</remarks>
      Public Sub GestAlarme(ByVal UnParam As String) _
      Implements IAlarmes.GestAlarme ' implémentation de la procédure définie dans l'interface
        mParam = UnParam ' met à jour la propriété avec le pearamètre
        Dim fenAlarmes As frmAlarmes = New frmAlarmes
        fenAlarmes.Label1.Text = mParam
        fenAlarmes.Label2.Text = mNom
        fenAlarmes.Show()
      End Sub
     
    End Class

  20. #20
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    J'ai regardé pour passer les données à travers le constructeur, mais on ne peut pas définir de constructeur dans une interface.

    Sinon quelques idées et conseils pour ton travail. (en vrac)

    Réfléchi bien à toutes les données que tu devras passer. (les placer en propriétés)

    Des propriétés dans ta classe Alarmes te permettrons de mettre à jour ou de récupérer des informations depuis vb6.

    Pour passer les données tu as 2 solutions :
    Soit tu passes systématiquement toutes les données en paramètre de ta sub GestAlarme.
    Soit Tu veux passer tout ou une partie des données, dans ce cas tu crés une sub Initialisation qui reçoit tous les paramètres. Tu pourras ainsi mettre à jour, seulement quelques propriétés ou toutes les propriétés avec la sub Initialisation , puis relancer les calculs.

    Note : si tu ne veux pas que l'utilisateur revienne sur l'exe vb6 ouvre la fenêtre de gestion des alarmes en modal.
    Si tu lui permets de revenir sur vb6 avant la fin de toutes les manip sur ta fenêtre des alarmes, attention à la création de plusieurs objets Alarmes (il faudrat utiliser un singleton, (à tester) shared n'est apparement pas autorisé dans les interfaces) mais cela est risqué s'il le fait au milieu des manip dans alarmes.

    Ex pour la 2 ème solution :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    ''' <summary>La classe alarme visible.</summary>
    ''' <remarks>Les éléments public seront visible. 
    ''' Bien implémenter toutes les définitions de l'interface.</remarks>
    Public Class Alarme
      Implements IAlarmes ' contrat entre classe et interface.
     
      ' définition (et création) pour disponibilité à toute la classe
      Dim fenAlarmes As frmAlarmes = New frmAlarmes ' la fenêtre de gestion des alarmes.
     
      ' Les propriétés (voir code post précédant)
      ' ...
     
      ''' <summary>La procédure de lancement de la gestion des alarmes.</summary>
      ''' <remarks>Aucune action sur les propriétés.</remarks>
      Public Sub GestAlarme() _
      Implements IAlarmes.GestAlarme
        ' implémentation de la procédure définie dans l'interface.
        fenAlarmes.Label1.Text = mParam
        fenAlarmes.Label2.Text = mNom
        fenAlarmes.ShowDialog()
      End Sub
     
      ''' <summary>Met à jour tous les paramètres nécessaire à Alarme</summary>
      ''' <param name="ParamUn">paramètre N°1</param>
      ''' <param name="ParamDeux">paramètre N°2</param>
      Public Sub Initialisation(ByVal ParamUn As String, ByVal ParamDeux As String) _
      Implements IAlarmes.Initialisation
        ' implémentation de la procédure définie dans l'interface.
        mParam = ParamUn
        mNom = ParamDeux
      End Sub
    End Class
    Bien penser à placer dans l'interface les élément que l'on souhaite voir au niveau de vb6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ''' <summary>L'interface représente un Wrapper de la classe Alarme pour le programme exe vb6.</summary>
    ''' <remarks>Sera exportée dans la bibliothéque de type créé dans l'assembly.</remarks>
    Public Interface IAlarmes
      Property Nom() As String
      Property Param() As String
      Sub GestAlarme()
      Sub Initialisation(ByVal ParamUn As String, ByVal ParamDeux As String)
    End Interface

    Dans vb6
    Les appels de gestion {1} initialisation complète des données, {2} initialisation partielle (conserve les autres données) tu n'en as peut être pas besoin
    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
    ' initialisation des données et gestion des alarmes (propriétés nom et param)
    Private Sub Command1_Click()
      Call monAlInt.Initialisation("1er élément (vb6) passé à Initialisation.", "2ème él. (vb6) passé à Initialisation.")
      Call monAlInt.GestAlarme  ' appele la sub de gestion des alarmes. (avec fenêtrage)
    End Sub
     
    ' initialisation partieles des données et gestion des alarmes
    Private Sub Command2_Click()
      monAlInt.Nom = "Voici un élément (venant de vb6) passé à la propriété 'Nom' de la classe Alarmes." ' affecte un texte à une propriété (nom) de la classe alarme
      Call monAlInt.GestAlarme
    End Sub
     
    ' récupération de données de la classe alarme (vide si pas d'init)
    Private Sub Command3_Click()
      MsgBox monAlInt.Nom & vbCrLf & monAlInt.Param
    End Sub
    Après, ce ne sont que quelques idées, et exemples. Tu les utilises comme tu veux.

    A+, Hervé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [PHP-JS] créer des espaces entre les mots php
    Par dgac2000 dans le forum Langage
    Réponses: 9
    Dernier message: 10/06/2019, 03h33
  2. Réponses: 6
    Dernier message: 05/06/2008, 00h50
  3. Créer des reperes sur les lignes de code
    Par alafu dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/07/2007, 15h44
  4. Créer des DLL manipulant les tables d'une BDD
    Par dj_techno dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/02/2007, 09h20
  5. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 13h25

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