Quand je genere mon programme de visual studio, j'obtient 3 fichier dans le dossier "Bin", un .dll, un .pdb et un .xml mais j'ai pas de fichier .tlb.
Quand je genere mon programme de visual studio, j'obtient 3 fichier dans le dossier "Bin", un .dll, un .pdb et un .xml mais j'ai pas de fichier .tlb.
Problème résolu ^^
J'ai exécuter Visual Studio en Administrateur comme tu la dit ^^ et le fichier que je voulais est venu !!
Vraiment, un grand Merci parce que j'ai vu que tu as postuler sur le forum parfois a 4H du matin et je te remercie beaucoup pour tous ton travail car tu m'avance au moins de 2 ou 3 semaine de boulot, je pensé pas que j'aller finir avant la fin avril et je suis juste le 9 ^^
J'ai testé ton programme, j'arrive à ouvrir une Form de type Visual studio 2010 sur un programme VB6 donc en gros toute les procedure qui se trouve dans le from pourrant marché sans souci, j'ai tjs pas essayé le transfert de donnée entre les deux programmes (VB6 et Visual Studio) mais avec ce que j'ai compris et étant données que mon programme utilise une classe qui fait appel qu'a des propriétés, normalement j'aurai pas trop de probleme.
Encore une fois merci, je prend la fin de la journée pour finir mon programme et je teste sa le plus rapidement possible.
Justement j'ai des variables Globale (Public) dans mon module qui sont utiliser dans mes deux Froms et je peut pas me permettre de les retirer sous risque de devoir changer plus de 500 lignes de codes. Si je met ces variables dans la class, ils ne seront pas pris en compte et le programme ne marche pas du coup.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.
Je vois pas ou placer mes variables et si je dois laisser le module, je voie pas comment le référencer.
Référencer le module = Implémenter le module ???
J'ai pas très bien compris ce qu'il faut faire quand tu dis qu'il faut référencer le module.
Je vais essayer de viré les variables qui se trouve dans le module et trouver un système D !! Je suis pas loin du bute avec ce projet la !!
Sans l'ensemble de ton programme c'est difficile de donner une solution.
C'était de faire un lien entre ta classe et les variables de ton module. Ta classe peut effectivement juste servir d'interface avec vb6 et tu complétes les variables de ton module avec les valeurs récupérées. Puisqu'elle sont déclarées publiques elles sont visibles de partout.
Il me semble que ce n'est pas une bonne idée. Mais il faut y réfléchir car finalement même si cela est relativement simple ce n'est pas très propre. S'il te faut reprendre le programme plus tard pour remettre propre cela risque d'être compliqué.
Bonne idée. (le dictionnaire représente toutes tes alarmes, tu as un exemple pour les passer aux fenêtres. tu ne dois pas avoir beaucoup d'autre variables)
Après celle qui ne servent que dans ton programme en interne peuvent rester dans ton module. (mais attention si tu comptes transformer ton module en classe shared fait le le plus tôt possible, pour éviter d'avoir plus de manip à faire plus tard)
Réflechi bien au besoin et à la solution avant de te lancer. (pas de bidouille )
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.
Attention les vérifications ne doivent pas être programmés dans les fenêtres. (par contre le tri ok puisque s'est juste une façons de présenter les données)
Cela doit être fait dans la classe Alarmes qui contient les données des alarmes avant de passer les données à la fenêtre pour l'affichage.
Idem pour les calculs.
S'il est nécessaire de déclencher des actions sur la classe depuis les fenêtres (calculs par exemple), il faut gérer des évènements.
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.
Bon, je commence à avoir une vue d'ensemble de ton programme.
Alors je dirai, attention les exemples ou idées que nous te donnons ne sont que réponses à des problèmes ponctuels. Il ne faut pas se baser la dessus pour définir la structure de ton programme.
Voici une idée par rapport à ce que je connais (cela te donne un exemple)
Une classe représentant les données de base d'une alarme.
Une classe représentant toutes les alarmes (liste données de base d'une alarme + procedures et fonctions qui manipules les alarmes)
Une classe alarme interface qui permettra de récupérer les info de vb6.
Une interface (nécessaire pour vb6).
Les classes form de visu.
Exemple en pratique
Une classe de base alarme (UneAlarme)
Une classe de la liste des alarmes (DesAlarmes)
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 Public Class UneAlarme 'IdAlarm Private mIdAlarm As String Public Property IdAlarm() As String Get Return mIdAlarm End Get Set(ByVal value As String) mIdAlarm = value End Set End Property 'Ack '... 'TimeIn 'Unit 'ModuleParam 'Description 'NiveauAlarm 'Message 'Priority 'Seuil 'Etat 'Supprimer End Class
Une listof aurait pu suffire à mon avis mais bon avec le dictionnaire c'est simple de retrouvre une alarme par son nom.
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 'Peut aussi contenir un ensemble de variables liées aux alarmes venant de vb6 ou interne. Public Class DesAlarmes Private mDicoAlarmes As Dictionary(Of String, UneAlarme) = New Dictionary(Of String, UneAlarme) Public Property DicoAlarmes() As Dictionary(Of String, UneAlarme) Get Return mDicoAlarmes End Get Set(ByVal value As Dictionary(Of String, UneAlarme)) mDicoAlarmes = value End Set End Property ' des propriétés qui correspondent à tes variables globales (seulement celles qui sont liées aux alarmes) ' propriétés ... '... Public Sub verif() '... End Sub Public Sub Calcul() '... End Sub End Class
Une classse InterfaceAlarme qui fait le lien avec vb6 puisqu'il faut impérativement une classe.
L'interface
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 ''' <summary>La classe alarme visible hors bibliothèque.</summary> Public Class InterfaceAlarme Implements IAlarmes ' contrat entre classe et interface. Private fenAlarmes As frmAlarmes = New frmAlarmes Private MesAlarmes As DesAlarmes = New DesAlarmes ' a voir la portée ' rajouter les autres propriétés à la sub Public Sub AjoutAlarme(ByVal UnId As String, ByVal LaPriorite As Integer) _ Implements IAlarmes.AjoutAlarme ' + les autres porpriété Dim NouvelleAlarme As UneAlarme = New UneAlarme NouvelleAlarme.IdAlarm = UnId NouvelleAlarme.Priority = LaPriorite ' etc ... MesAlarmes.DicoAlarmes.Add(NouvelleAlarme.IdAlarm, NouvelleAlarme) End Sub Public Sub GestAlarme() _ Implements IAlarmes.GestAlarme fenAlarmes.MesAlarmes = MesAlarmes fenAlarmes.ShowDialog() ' a voir si l'utilisateur modifie les alarmes MesAlarmes = fenAlarmes.MesAlarmes ' traitements sur les alarmes avant retour sur vb6 (cela peut avoir été fait dans la fenêtre avec l'objet MesAlarmes de fenAlarmes (donc dans fenAlarmes.MesAlarmes)) ' A voir retour vers vb6 End Sub End Class
L'ensemble est relativement simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ''' <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 Sub GestAlarme() Sub AjoutAlarme(ByVal UnId As String, ByVal LaPriorite As Integer) _ End Interface
La fenêtre de visu
C'est GestAlarmes qui passe une instance (objet) des alarmes à la fenêtre avant de l'ouvrir. (A toi de voir si tu as besoin des alarmes ou juste du dico)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Public Class frmAlarmes Private mMesAlarmes As DesAlarmes Public Property MesAlarmes() As DesAlarmes Get Return mMesAlarmes End Get Set(ByVal value As DesAlarmes) mMesAlarmes = value End Set End Property '...
C'est un exemple par rapport à ce que je connais, mais cela te donne une idée sur la démarche.
Cela doit être pensé au début, sinon on a des surprises. Donc réfléchi bien à l'ensemble.
A+, Hervé.
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.
sa l'air vraiment structuré a côté de mon programme
Je regarde sa se matin !!
Si je déclare mon DicoAlarm en public dans la class DesAlarm, lorsque je fais appel à la procédure AjoutAlarme qui me permet d'ajouter une alarme avec les propriétés désiré dans le dico directement sur le programme en VB6. Mais est-ce que mon dico sera visible sur mes Forms ou seulement dans le fichier ou il se trouve ? parce que pour l'instant j'ai laisser les procédure que j'avais dans mes Forms car elle utilise des objets propre aux Forms tel que les datagridView.
Je viens de passer mes datagridview en public, normalement, je peux les modifier et réaliser des lectures d'un autre module je pense.
Dans mon exemple la fenêtre à une propriété de type classe MesAlarmes
GestAlarme passe à ta fenêtre l'objet MesAlarmes alimenté par AjoutAlarme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Public Class frmAlarmes Private mMesAlarmes As DesAlarmes Public Property MesAlarmes() As DesAlarmes Get Return mMesAlarmes End Get Set(ByVal value As DesAlarmes) mMesAlarmes = value End Set End Property Private Sub frmAlarmes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MessageBox.Show(mMesAlarmes.DicoAlarmes("a1").Priority) ' affiche 1 valeur passé par l'exe vb6 avec ajout alarme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Public Sub GestAlarme() _ Implements IAlarmes.GestAlarme fenAlarmes.MesAlarmes = MesAlarmes fenAlarmes.ShowDialog()
Avec la propriété MesAlames de ta fenêtre tu peux manipuler toutes les alarmes qui ont été transmises par vb6, et alimenter yon DataGridView.
Pour info dans 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 mesAlarme As Alarmes.InterfaceAlarme ' la classe vb.net Private mesAlInt As Alarmes.IAlarmes ' l'interface pour vb6 Private Sub Form_Load() Set mesAlarme = New Alarmes.InterfaceAlarme ' instancie la classe alarme (nous avons un objet alarme) Set mesAlInt = mesAlarme ' récupère l'interface à partir de l'objet alarme (permet d'avoir l'Intellisense ce qui est très pratique) End Sub ' initialisation des données et gestion des alarmes (propriétés nom et param) Private Sub Command1_Click() Call mesAlInt.AjoutAlarme("a1", 1) Call mesAlInt.GestAlarme ' appele la sub de gestion des alarmes. (avec fenêtrage) End Sub
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.
Laisse les datagridview interne à la fenêtre, il ne servent que d'interface visuelle avec l'utilisateur. Ta propriété MesAlarmes de ta fenêtre doit te permettre d'agir avec les DataGridView et les procédures de ta fenêtre.
Essaye de voir la philosophie objet
Ou la classe DesAlarmes contient les données des alarmes et les méthodes qui les manipules.
Et ta fenêtre qui se sert de l'instance de cette classe (l'objet cré dans le programme) pour présenter les données à l'utilisateur avec tes procédures de mise en forme et de présentation des données.
Si tu avais des procédures qui transforment les données dans ta fenêtre place les dans ta classe DesAlarmes. comme cela tu les auras de partout ou tu utilises MesAlarmes (cela évite de réécrire le code à plusieurs endroit)
Par exemple :
une procedure ChangeNiveauDePriorite(NouveauNiveau) doit se trouver dans UneAlarmes.
une fonction NombreDePrioritéDeNiveau(x) doit se trouver dans DesAlarmes. elle renvoie le résultat qui lui sera affiché par la fenêtre.
Une procedure MetUneCouleurParNiveau (pour datagridview) doit être dans ta fenêtre.
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.
Exemple avec le changement de priorité
Dans UneAlarme
Pas de changement dans DesAlarmes
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 Public Class UneAlarme Const PrioriteMin As Integer = 0 ' pour exemple (doivent être en fichier de config ou BDD) Const PrioriteMax As Integer = 10 Private mPriority As Integer ' en lecture seule, la fonction ChangeNiveauPriorite vérifie la validité de la nouvelle priorité avant de la placer dans la propriété Priority Public ReadOnly Property Priority() As Integer Get Return mPriority End Get End Property 'vérifie la validité de la nouvelle priorité Public Sub ChangeNiveauPriorite(ByVal Niveau As Integer) If (PrioriteMin <= Niveau <= PrioriteMax) Then mPriority = Niveau End Sub
Dans InterfaceAlarmes
L'interface
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 Public Sub AjoutAlarme(ByVal UnId As String, ByVal LaPriorite As Integer) Implements IAlarmes.AjoutAlarme Dim NouvelleAlarme As UneAlarme = New UneAlarme NouvelleAlarme.IdAlarm = UnId NouvelleAlarme.ChangeNiveauPriorite(LaPriorite) MesAlarmes.DicoAlarmes.Add(NouvelleAlarme.IdAlarm, NouvelleAlarme) End Sub Public Sub GestAlarme() Implements IAlarmes.GestAlarme fenAlarmes.MesAlarmes = MesAlarmes ' donne les alarmes à la fenêtre fenAlarmes.ShowDialog() MesAlarmes = fenAlarmes.MesAlarmes ' récupère les alamres traitées par la fenêtre End Sub Public Sub LitAlarmes(ByVal UnId As String, ByRef LaPriorite As Integer) Implements IAlarmes.LitAlarmes LaPriorite = MesAlarmes.DicoAlarmes(UnId).Priority End Sub
Dans la fenêtre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Public Interface IAlarmes Sub GestAlarme() Sub AjoutAlarme(ByVal UnId As String, ByVal LaPriorite As Integer) Sub LitAlarmes(ByVal UnId As String, ByRef LaPriorite As Integer) End Interface
Dans vb6
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 Public Class frmAlarmes Private mMesAlarmes As DesAlarmes Public Property MesAlarmes() As DesAlarmes Get Return mMesAlarmes End Get Set(ByVal value As DesAlarmes) mMesAlarmes = value End Set End Property 'pour test Private Sub ActionChangeNiveauA2() mMesAlarmes.DicoAlarmes("a1").ChangeNiveauPriorite(2) End Sub
Tu as un principe de fonctionnement complet.
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 Private mesAlarme As Alarmes.InterfaceAlarme ' la classe vb.net Private mesAlInt As Alarmes.IAlarmes ' l'interface pour vb6 Private Sub Form_Load() Set mesAlarme = New Alarmes.InterfaceAlarme ' instancie la classe alarme (nous avons un objet alarme) Set mesAlInt = mesAlarme ' récupère l'interface à partir de l'objet alarme (permet d'avoir l'Intellisense ce qui est très pratique) End Sub ' initialisation des données et gestion des alarmes (propriétés nom et param) Private Sub Command1_Click() Dim pri As Long Call mesAlInt.AjoutAlarme("a1", 1) Call mesAlInt.GestAlarme ' appele la sub de gestion des alarmes. (avec fenêtrage) Call mesAlInt.LitAlarmes("a1", pri) MsgBox ("vb6 " & pri) ' affiche 2 End Sub
A+, Hervé.
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.
Depuis 2 jours c'est un sac de noeux dans ma tête, un vrai bordel et la je commence vraiment a sortir et en plus c'est tous structuré. J'arrive déjà a lancer mon gestionnaire via VB6, j'ai mi quasi toute mes procédure qui se trouver dans mon Form2 directement dans une classe MethodeVariable qui se trouve dans mon fichier principal. J'ai rajouter mes variables qui était avant dans mon module dans ma classe Alarme et j'ai fait hérité la classe MethodeVariable de la classe Alarme pour récupéré mes variables sans souci car j'ai besoin des variables dans ma classe Alarme et dans l'autre pour certaine procédure.
Je commence un peu à voir la philosophie objet et j’espère que d'ici quel que semaine, je serai un .... dans la programmation orienté Objet.
Pour l'instant j'ai encore quelque petit souci au niveau du dico qui est vide je sais pas pourquoi mais je planche dessus.
J’espère qu'en fin de journée j'aurai un programme qui tourne a fond pour le mettre sur le forum.
Un grand merci à rv26t !! J'ai appris beaucoup de truc grâce à toi !!
Je pense savoir d’où viens mon problème, avec ma Procédure AjoutAlarme j’enregistre dans ma bibliothèque une clé pour un objet alarm mais l’objet alarme est déclarer dans la procédure donc à la fin de la procédure il est détruit à cause du destructeur et donc quand j'utilise mon dico, il est vide.
D’où mes deux poste d'hier pour essayer de déclarer des Objets Alarmes de maniéré dynamique et en globale.
Je vais essayer de voir si je peux pas les déclarer manuellement dans mon programme en VB6, c'est pas très dramatique de toute façon, j'aurai aimé que mon programme soit plus automatique et qu'il permet à l'utilisateur de configurer le moins de truc possible dans le programme VB6 mais je vais devoir m'en passé.
Par contre si je déclare des Objets Alarmes manuellement dans le programme en VB6, je crois qu'elle seront pas importé dans mon programme en Visual Studio ce qui ne sert a rien.
Il faut absolument que je réaliser une procédure qui déclarer des Objets Alarmes en public dans ma classe Alarme à chaque fois que je le demande avec un nom différent à chaque fois.
Voila j'ai pensé à un truc dans ce genre sachant que "x" est une concaténation entre un String "Alarm" et le numéros de l'alarme qu'on souhaite ajouter qui est unique. Alors le probleme est qu'il aime pas la déclaration public dans une procédure ^^
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 Public Sub AjoutAlarme(ByVal idAlarm As Integer, ByVal unit As String, ByVal moduleparam As String, ByVal description As String, ByVal niveaualarm As String, ByVal message As String, ByVal priority As String, ByVal seuil As String) _ Implements IAlarmes.AjoutAlarme Dim x As String = "Alarm" & idAlarm Public x As Alarme = New Alarme x.IdAlarm = idAlarm x.Unit = unit x.ModuleParam = moduleparam x.Description = description x.NiveauAlarm = niveaualarm x.Message = message x.Priority = priority x.Seuil = seuil DicoAlarm.Add(x.IdAlarm, moduleparam) DicoAlarm2.Add(x.ModuleParam, moduleparam) i0 = i0 + 1 End Sub
En plus c'est dans "x" qu'il va déclarer l'alarme et non pas "Alarm" & 1 par exemple !!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager